• ベストアンサー

拾ってきたソースをうまくビルド出来ない

正確に言うと、ソースの言語がC++なのかC#なのかわかりません。 おそらくC++だろうと思ってるのですが・・・。 #include <stdio.h> #include <string.h> #include <windows.h> int Time[5]={0}; DWORD GetRegInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, DWORD dwDefault) { BOOL bResult = FALSE; DWORD dwBuffer = 0; HKEY hOpenKey; if(RegOpenKeyEx(HKEY_CURRENT_USER, lpszSection, 0, KEY_EXECUTE, &hOpenKey) == ERROR_SUCCESS) { DWORD dwType; DWORD dwBufferSize = sizeof(DWORD); if(RegQueryValueEx(hOpenKey, lpszEntry, 0, &dwType, reinterpret_cast<LPBYTE>(&dwBuffer), &dwBufferSize) == ERROR_SUCCESS) { bResult = TRUE; } RegCloseKey(hOpenKey); } if(!bResult) { dwBuffer = dwDefault; } return dwBuffer; } void GetRegString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault, LPTSTR lpBuffer, DWORD nSize) { BOOL bResult = FALSE; HKEY hOpenKey; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSection, 0, KEY_EXECUTE, &hOpenKey) == ERROR_SUCCESS) { DWORD dwType; DWORD dwBufferSize = nSize; if(RegQueryValueEx(hOpenKey, lpszEntry, 0, &dwType, reinterpret_cast<LPBYTE>(lpBuffer), &dwBufferSize) == ERROR_SUCCESS) { bResult = TRUE; } RegCloseKey(hOpenKey); } if(!bResult) { lstrcpyn(lpBuffer, lpszDefault, nSize); } } (文字制限を越えてしまったので、下半分を消しました) とりあえず、なにはともあれ試しにビルドしてみようと思い、bcc55でやってみました。 結果、.exeファイルと、.objともう一つ(名前忘れた)ができて、うまくできたかと思い、起動してみたのですが、DOSが開いてすぐ閉じてしまいます。 元々、このソースは既にビルドされた.exeファイルと一緒にアップロードされてたので、うまくいったらこういう動作をするっていうのは分かってたので、うまくビルドできてないのでしょう・・・。 そこで考えられる原因を考えたら、「言語が違う」これしか思いつきませんでした。 C#なのかもしれないと思い、Microsoft Visual C# Express Editionでも試してみましたが、これもうまくいかず、google先生に頼ってみましたが行き詰ってしまいました。 質問したい点を挙げます。 ・この言語はC++でしょうか?もしくはbcc32でコンパイル可能でしょうか? ・もし不可能な場合、どのコンパイラを使用すればうまくいくでしょうか?(できればフリーソフトでやりたいです)

質問者が選んだベストアンサー

  • ベストアンサー
  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.7

#1です せっかく最初からコンパイル(リンク)できて実行モジュールできていた環境なのに なんか悪化させてるようですね 途中段階を一切見てませんが >プロジェクトをビルドした際のエラー7個のうち、1個がこんな感じです。 私が書いているところのリンクエラーを起こしています 大雑把な意味と(用語使い方)して コンパイルーーーー Cで作成されたソースをコンパイルして中間ファイルを作成 リンク ----- 複数の中間ファイルをリンクして実行モジュールを作成 という形になります(両方の動作を行って実行モモジュール作成することをビルドといいます) ソースファイルのどこかで RegCloseKey とか言う関数をコール(使用) しているにもかかわらずリンクしているファイルの中に その関数が存在していない  という意味です ですので実行モジュールができません 普通コンパイル・リンク両方が限り実行モジュールは作成されません だからこそ #1で bccでできてるんでしょ  と書いたわけです そのコードが何をやっているかはわからないので 動作確認するためにはソース見たりデバック作業が必要になります

nery1024
質問者

お礼

自分はC言語を昔習ったのですが、そのときにソースを書いてコンパイルすると、exeが生成されて、そのまま使えると思い込んでました。 でも今回また調べなおして、それは違うって事がわかりました。 それで、結局のところなんですが、元々入ってたexeファイルと同じ動作をするファイルを生成することができました。 VC++2008EEだと、説明してるサイトも分かりにくかったので、BCC Developerを使用してるサイトを見ながらやってみました。 >リンクしているファイルの中にその関数が存在していない まさにこれが原因でした。 簡単な解決方法があったのでできました。 このソースが使うヘッダーファイルやライブラリを、全てプロジェクトの中間ファイルとかを出力するディレクトリにコピーしたらうまくできました。 たぶんちゃんとどこかの設定をできてれば、コピーしなくてもできるのでしょうが、自分にはわからなかったので、windows.hとかもコピーしました。 解決できてよかったです。 回答ありがとうございました。

その他の回答 (7)

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.8

#7補足 ついでに書いておきますと RegCloseKey というのは WindowsAPIの関数でレジストリ操作をする関数です 仮にコンソールアプリなどで作成しているのであれば リンク時に advapi32.lib を一緒に リンク指定してやる必要があります(VC6++のヘルブでの話) ----以下RegCloseKey関数Helpからの抜粋-------- Windows NT: Requires version 3.1 or later. Windows: Requires Windows 95 or later. Windows CE: Requires version 1.0 or later. Header: Declared in winreg.h. Import Library: Use advapi32.lib.

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.6

> 結果なんですが、ビルド:1正常終了、0失敗で、できたかなと思ったら、エラー0、警告7となっていて、exeファイルは生成されませんでした。 そのメッセージからすると、コンパイルは成功しています。 「Debug」もしくは「Release」というフォルダの下を見てください。 おそらくその中にexeが出来てると思います。

nery1024
質問者

補足

昨日調べて、警告も0にできましたが、exeファイルは生成されませんでした。 #pragma warning(disable : 4996 )←これで、危険じゃないよって事らしいです。 void Setting(void)←これは元のソースです。 プロジェクトをビルドすると、エラーいっぱい出ますね・・・。 ソースだけならエラー0警告0にできたんですが。 プロジェクトをビルドした際のエラー7個のうち、1個がこんな感じです。 truct HKEY__ *)" (?RegCloseKey@@$$J14YGJPAUHKEY__@@@Z) が関数 "unsigned long __cdecl GetRegInt(char const *,char const *,unsigned long)" (?GetRegInt@@$$FYAKPBD0K@Z) で参照されました。 このエラー文をそのままぐぐったりしたんですが、いまだに意味不明です。 それから設定をちょこちょこ変えながらやってみてるんですが、できませんね。 おそらく、プロジェクトをビルドできないとだめなんでしょうけど・・・。

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.5

C++でWin32Apiを使ってレジストリをゴニョゴニョするツールの一部に見えます。 エクスプローラからダブルクリックではなくコンソールから実行ファイル名をタイプして実行すると何かメッセージが出力されているかもしれません。 ※コンソールアプリをエクスプローラから実行するとプログラム終了と同時にコンソールが閉じてしまいます。 このソースをbccではなくVCかgccでビルドしてみては? bcc55ってテンプレートかSTLの実装に不具合があったように思います。

nery1024
質問者

お礼

お待たせしました。 結果なんですが、ビルド:1正常終了、0失敗で、できたかなと思ったら、エラー0、警告7となっていて、exeファイルは生成されませんでした。 その理由についても調べてみようと思ったのですが、自分の知識では明確な答えは得られませんでした。 ぼんやりわかったことしか言えませんが、このソースで記述できなかった部分で、HuckShieldのバージョンチェックが入る際に、チェック終了と同時に、旧バージョンを置き換えてHuckShieldでの強制終了を避ける。というのもで、警告が出てる部分の記述を読む限りだと、VC++2008EEだと、 warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. この機能は危険かもしれません。もし使いたいなら_CRT_SECURE_NO_WARNINGSを使ってください。と出ました。 警告文にもあるように、詳細はヘルプを見てくれとのことで、かなり探しましたが、記述方法が書いてないのです・・・。 まだ挑戦しますが・・・。

nery1024
質問者

補足

なるほど。 makefileについて調べていたのですが、開発環境?みたいのを提供してる、MicrosoftのVisual C++とかだと、自動的にやってくれるみたいなの書いてありました。 原理はまだよくわかりませんが、興味でそれを試してみます。 少し時間がかかりそうですが、結果はお礼に書きますね。 ありがとうございます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> このソースをアップされた方は、匿名掲示板で自らファイルを配っていたのですが、問題ありそうでしょうか? > それとソースを一部しか公開していないので(偶然ではありますが)、おそらく問題なしかと思うのですが・・・。 著作権者が利用や再配布を明示的に許可していないのであれば、本人に問い合わせて許可を得るしかありません。それができないのであれば著作権侵害です。出処も明らかにされていないので、引用にすらなりません。

nery1024
質問者

お礼

わかりました。 匿名掲示板ですが、なんとか問い合わせてみます。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

> ・この言語はC++でしょうか?もしくはbcc32でコンパイル可能でしょうか? 見るからにC言語です。MFCなんかは使っておらず素のWin32APIを使っているようですから Borland C++(bcc32) でもコンパイル可能である可能性が高いと思います。 Microsoft で試すなら、VisualC++ の方で。 > (文字制限を越えてしまったので、下半分を消しました) その消されている下半分が重要なのですが、 その中に、「main関数」と「WinMain関数」のどちらがありますか? それによって話は変わります。 以下、推測ですが、 stdio.h をinclude しているところを見ると、main関数が入ってる可能性が高いと思います。 もしそうだとすると、コンソールアプリケーションですから、 コマンドプロンプトから使うのが正しい利用方法であり、 > 結果、.exeファイルと、.objともう一つ(名前忘れた)ができて、うまくできたかと思い、起動してみたのですが、DOSが開いてすぐ閉じてしまいます。 これは、正しい動作ってことになります。 コマンドプロンプトから適切な引数を指定して実行してください。

nery1024
質問者

お礼

まだ解決には至りませんが、またgoogle先生にお世話になったところ、makefileなるものがあるそうですね。 この元の実行ファイルはあるので、今は知識を深めたいと思って色々調べてるところなんですが、ここで仰ってる引数とは、.exeファイルや、ヘッダーファイルや、.objをコマンドプロンプトで呼び出せということですか?

nery1024
質問者

補足

>見るからにC言語です。MFCなんかは使っておらず素のWin32APIを使っているようですから >Borland C++(bcc32) でもコンパイル可能である可能性が高いと思います。 >Microsoft で試すなら、VisualC++ の方で。 おお、そうですか、とても参考になります。 >コマンドプロンプトから適切な引数を指定して実行してください。 恥ずかしながらC言語を過去に習ったのですが、引数とはプログラムのどこかを指定して呼び出すことですよね? ぼんやり覚えてはいるのですが、かなり忘れてます・・・。 できたら具体例を頂けると大変ありがたいです。 さっそく回答してくださってありがとうございます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> ソースの言語がC++なのかC#なのかわかりません。 言語も分からないということは、ライセンスも分からない可能性が高いですね。 実際にどうなのかは分かりませんが、犯罪に加担することはできませんので、出処を明確にしてください。

nery1024
質問者

補足

このソースをアップされた方は、匿名掲示板で自らファイルを配っていたのですが、問題ありそうでしょうか? それとソースを一部しか公開していないので(偶然ではありますが)、おそらく問題なしかと思うのですが・・・。 もしそういう問題でないということであれば考えさせていただきます。 ご意見くださいましてありがとうございます。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

>・この言語はC++でしょうか?もしくはbcc32でコンパイル可能でしょうか? >とりあえず、なにはともあれ試しにビルドしてみようと思い、bcc55でやってみました。 >結果、.exeファイルと、.objともう一つ(名前忘れた)ができて、うまくできたかと思い、起動してみたのですが、DOSが開いてすぐ閉じてしまいます。 実行モジュールもできているのであればコンパおる可能ですか?では無く コンパイル・リンクしてるわけですよね? (その実行モジュールがどのようなことを行っているかはわかりません) >Microsoft Visual C# Express Editionでも試してみました どうせやるならC++の方がいいかもしれません(大きな違いは無いかもしれないけど) 本当に一緒にあったexeがこのソースの実行モジュールなのかどうかも 質問文の内容だけでは定かではありません (Win32APIコールしてるんでプラットフォームはWindowsだとは思いますが)

nery1024
質問者

お礼

>コンパイル・リンクしてるわけですよね? いま、3件回答を頂きまして、正直よくわからないのですが、予想で言いますと、まさにこの「リンク」について自分は知る必要があるのかもしれません。 >本当に一緒にあったexeがこのソースの実行モジュールなのかどうかも >質問文の内容だけでは定かではありません もしかすると、ある一部をカットして、主要部分だけソースを公開するケースもあるんですかね・・・。 一緒にあったexeファイルは開くと、DOSが起動して、コメントがでます。 そして、このソースを自分でコンパイルして起動したときとは違って、閉じません。 そう思いたくはないですが、一部カットされてるのでしょうか・・・。 とにかく、参考になりました。ありがとうございます。

関連するQ&A

  • RegQueryValueExでの2バイト文字

    RegQueryValueExを使ってレジストリキーから値をとってきたいのですが、そのキー(REG_SZ)にはファイルパスが記載されており、そのキーを取得するときに2バイト文字(日本語のフォルダ名)があるとそこでデータが切れてしまって取得してしまいます。 c:\test\テスト\aaa.dll とあるとテスト直前のc:\test\しか取得できません。以下の例ではEntryのキーに上記dllパスが記載されてます。 char data[256]; DWORD dwSize; DWORD dwSize; RegQueryValueEx(hKey,(LPCTSTR)Entry,NULL,&dwType,NULL,&dwSize); RegQueryValueEx(hKey,(LPCTSTR)Entry,NULL,&dwType,(LPBYTE)data,&dwSize); 2バイト文字がないと正しく取得できます。 どのように実装すればよいでしょうか?

  • レジストリ値の取得

    こんばんは。 レジストリ値の取得について教えてください。 下記のテストコードですが、これだけだとOKなのですが、いざ実際に使おうと他のソースに入れ込むと、一番最初(WinMain直後)に持ってきたとしても、「アプリケーションエラー」になってしまいます。 恐らくメモリの確保ができてないのかと思うのですがどうしたらよいのでしょうか? 環境は OS: Windows 2000 Professional C: Borland C++ Compiler です。 -- #include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HKEY hKey; LPBYTE lpData; LPDWORD lpcbData; lpData = (LPBYTE)malloc(256); RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup", 0, KEY_QUERY_VALUE, &hKey); RegQueryValueEx(hKey, "BootDir", NULL, NULL, NULL, lpcbData); RegQueryValueEx(hKey, "BootDir", NULL, NULL, lpData, lpcbData); RegCloseKey(hKey); MessageBox(NULL, lpData, "lpData", MB_OK); return 0; }

  • レジストリ経由のフォント受渡し???

    数日前に類似の質問をさせて頂きました ご親切に3件もご指導の回答を頂きましたが、私の質問の仕方が悪く問題の解決に至っておりません 再度、質問形式を変更してお教えを請いたいと存じます C#のアプリケーションでフォントダイアログを表示してフォントを指定します 指定されたものをレジストリに書込みます FontDialog MyFont = new FontDialog(); if (MyFont.ShowDialog() != DialogResult.Cancel) { key = Registry.CurrentUser; key = key.CreateSubKey(@"MyCompany\MySoft"); key.SetValue("MyKey", MyFont.Font, Microsoft.Win32.RegistryValueKind.Unknown); ← (1) } レジストリの HKEY_CURRENT_USER ⇒ SoftWare ⇒ MyCompany ⇒ MySoft の下の MyKeyには REG_SZ 種類でデータとして [Font: Name=HPG行書体, Size=15.75, Units=3, GdiCharSet=128, GdiVericalFont=False] ← (2) と設定されました これをC++プログラムで読み込み、フォントダイアログで指定されたフォントで印刷します HKEY hKey; DWORD dwDisposition; LONG result; result = RegCreateKeyEx( HKEY_CURRENT_USER,L"MyCompany\\MySoft",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition); HFONT MyHFONT;  ← (3) result = RegQueryValueEx(hKey,L"MyKey",NULL,&dwType,NULL,&dwSize); //データのサイズを取得 result = RegQueryValueEx(hKey,L"MyKey",NULL,&dwType,(LPBYTE)(LPCTSTR)&MYHFONT,&dwSize); ← (4) SelectObject(hdc,MYHFONT); TextOutW (hdc, ~~  ← (5) 質問 (1) フォント指定をレジストリに書込む時、Unknown指定で良いのでしょうか  (2) Unknow指定で書込みましたがREG_SZ種別になっています OKですか それから書き込まれたデータはこれで正常ですか (3) HFONTを指定していますが、この場合OKですか (4) (LPBYTE)(LPCTSTR)&MYHFONTで受けていますが良いのでしょうか? (5) 最大のワカラナイ!!! 印刷された文字はC#のフォントダイアログでしていされたものに変化していない 以前のままです C++は初心者です 特にフォントのハンドリング知識は浅学です 宜しくご指導お願い申し上げます

  • RegQueryValueExについて

    Visual Studio C++ .NET 2003でレジストリの値を変更するコンソールアプリケーションを作りたいのですが、 RegQueryValueExで値を読み出すことができません。 下記のようにするとPathLenは正しく読み出せているのですが肝心のPathに何も格納されていないようです。 また4番目の引数はREG_SZが正しいように思えるのですがNULLでないと実行時に "ハンドルされていない例外:System.NullReferenceException:オブジェクト参照がオブジェクト インスタンスに設定されていません" というメッセージが出て途中終了してしまいます。 どなたかよろしくお願い致します。 long lRet; HKEY hkResult; CString Res; char Path[256]; long PathLen=0; //レジストリのハンドルと環境変数のレジストリをリードモードでオープン lRet = RegOpenKeyEx( HKEY_USERS, "S-1-5-21-842925246-1563985344-1957994488-500\\Environment", 0, KEY_ALL_ACCESS, &hkResult ); if(lRet == ERROR_SUCCESS) { //現在のパスを読み込む PathLen = strlen(Path); RegQueryValueEx( hkResult, "NEWVALUE", NULL, /*(LPDWORD)REG_SZ,*/NULL, (LPBYTE)Path, (LPDWORD)&PathLen ); } printf("%s\n", Path);printf("%ld\n", PathLen); //ハンドルをクローズ RegCloseKey(hkResult); インデントができなかったので見づらくてすみません。

  • UTF_16で取得しUTF_8で出力したい!!

    こんにちは。 C言語初心者です。以前この件で質問させていただいたのですがエラーがとれず、もう一度質問してしまいました。 今回は、C言語でレジストリからデータをUTF_16で取得し、UTF_8で表示すると言うプログラミングを組みたいのですがどうしても下記のコードではエラーが出てしまいどうしていいかわかりません。 エラーの内容としては、16から8に変換する部分のutf8Sizeの部分で上手くいっていないようで、、、 どうしたらいいかわからないので、もし知っている方がいればよろしくお願いします。 #include<windows.h> #include<stdio.h> void QueryValue(void); int main(void){    QueryValue();    return 0; } void QueryValue(void){    HKEY hkey;    DWORD ValueType;    DWORD ValueSize;    wchar_t Value[1000];    char *utf8String = 0; // UTF-8 文字列バッファへのポインタ    size_t utf8Size = 0; // UTF-8 文字列のバイト数 (終端 NUL 含む) int result; // WideCharToMultiByte() の戻り値    /*レジストリキーのオープン*/    RegOpenKeyEx(      HKEY_LOCAL_MACHINE,         L"SOFTWARE\\Hitachi\\JP1/RemoteControlManager",      0,      KEY_ALL_ACCESS,      &hkey);     ValueSize = 1000;   /*レジストリ値の取得*/    RegQueryValueEx(      hkey,      L"ProgramName",      NULL,      &ValueType,      (LPBYTE)Value,      &ValueSize);    /*結果の表示(シフトJIS変換’%S’)*/    if(ValueType == REG_SZ) printf("%S\n",Value);    else printf("....can't read\n"); /*****************************************************/    //UTF_16からUTF_8変換を行う    result = WideCharToMultiByte(      CP_UTF8,      WC_NO_BEST_FIT_CHARS,      Value,      -1,      utf8String,      utf8Size,      NULL,      NULL);    if(result <= 0){      fprintf(stderr,"UTF_16→UTF_8変換エラー(%lu)\n",GetLastError());    }    /*結果の表示()*/    if(ValueType == REG_SZ) printf("%s\n",utf8String);    else printf("....can't read\n");    /*UTF_8文字列バッファを開放する*/    free(utf8String); /************************************************/    /*終了*/    RegCloseKey(hkey); }

  • 使用者名/組織名のエディットボックスへの表示方法

    Win XP PRO SP2、VC++6.0にてレジストリから使用者名/組織名を取得して、フォーム上の「表示」ボタンをクリックするとエディットボックスに表示するソフトを作成しています。 コンパイルもリンクも正常に出来ますが、フォームが表示されて「表示」ボタンをクリックすると、「問題が発生したため、registry_change.exe を終了します。 ご不便をおかけして申し訳ありません。」というウィンドウが表示されます。 どなたか教えて下さい。 よろしくお願いします。 下記が「表示」ボタンのコードです。 void CRegistory_changeView::OnButton1() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください CString ss; HKEY hRootKey; char EntryName1[256],EntryName2[256],KeyName[256],szBuff[256]; DWORD cbBuff; CEdit* myED1=(CEdit*)GetDlgItem(IDC_EDIT1); CEdit* myED2=(CEdit*)GetDlgItem(IDC_EDIT2); /* レジストリキーを開きます */ strcpy(KeyName, "Software\\Microsoft\\Windows NT\\CurrentVersion"); strcpy(EntryName1, "RegisteredOwner"); // 使用者名 strcpy(EntryName2, "RegisteredOrganization"); // 組織名 RegOpenKeyEx(HKEY_LOCAL_MACHINE, KeyName, 0, KEY_READ, &hRootKey); /* 実際にアクセスし文字列を取得します */ cbBuff = sizeof(szBuff); //(標準) RegQueryValueEx(hRootKey, EntryName1, NULL, NULL, (LPBYTE)szBuff, &cbBuff); myED1->SetWindowText((class CString &)cbBuff); RegQueryValueEx(hRootKey, EntryName2, NULL, NULL, (LPBYTE)szBuff, &cbBuff); myED2->SetWindowText((class CString &)cbBuff); RegCloseKey(hRootKey); }

  • イベントログの読み込み 

    すみません。 教えてくださいませ。 早速ですが、Vc++でイベントログを取得するプログラムを作成しているのですが、うまくいきません。 [ソース] DWORD BufSize; DWORD ReadBytes; DWORD NextSize; DWORD EventNum; BOOL bResult; HANDLE hEventLog = NULL; HGLOBAL hDIB; try{ /* イベントログのオープン */ hEventLog = ::OpenEventLog(NULL, "Application"); if(hEventLog == NULL){ eMsg = "ファイルオープンエラー"; return -1; } /* イベントログの最大数 */ bResult = GetNumberOfEventLogRecords(hEventLog, &EventNum); for(;;){ //最大サイズを取得 BufSize = 1; hDIB = GlobalAlloc(GMEM_FIXED, BufSize); bResult = ::ReadEventLog(hEventLog,EVENTLOG_FORWARDS_READ | EVENTLOG_SEQUENTIAL_READ,0,hDIB,BufSize,&ReadBytes,&NextSize); if(!bResult && GetLastError() != ERROR_INSUFFICIENT_BUFFER) { eMsg = "ファイルリードエラー"; CloseEventLog(hEventLog); GlobalFree(hDIB); return -1; } GlobalFree(hDIB); hDIB = NULL; BufSize = NextSize; hDIB = ::GlobalAlloc(GMEM_FIXED, BufSize); bResult = ::ReadEventLog(hEventLog,EVENTLOG_FORWARDS_READ | EVENTLOG_SEQUENTIAL_READ,0,hDIB,BufSize,&ReadBytes,&NextSize); if(!bResult){ eMsg = "ファイルリードエラー"; CloseEventLog(hEventLog); GlobalFree(hDIB); return -1; } } }catch(CException* e){ if(hEventLog != NULL){ eMsg = (LPCTSTR)e; CloseEventLog(hEventLog); } } GlobalFree(hDIB); return 1; [内容] 正常にコンパイルはするのですが、実行後エラーが出力されます。"ファイルリードエラー"(エラー文) メモリの確保がうまくいっていないのでしょうか?

  • 署名と検証

    http://eternalwindows.jp/crypto/cng/cng06.html にあるサンプルの status = BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_ECDSA_P256_ALGORITHM, NULL, 0); if (!NT_SUCCESS(status)) return ; if (bSign) { if (ImportKeyData(hAlg, szPrivKeyFileName,BCRYPT_ECCPRIVATE_BLOB, &hKey)) { if (SignData(hKey, szFileName, (LPBYTE)szData, sizeof(szData))) { MessageBox(TEXT("署名をしました。")); BCryptDestroyKey(hKey); } } } else { if (ImportKeyData(hAlg, szPubKeyFileName, BCRYPT_ECCPUBLIC_BLOB, &hKey)) { if (VerifyData(hKey, szFileName, &lpData, &dwDataSize)) { MessageBox( (LPTSTR)lpData); HeapFree(GetProcessHeap(), 0, lpData); BCryptDestroyKey(hKey); } } } の部分を、書き換えて status = BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_RSA_SIGN_ALGORITHM , NULL, 0); if (!NT_SUCCESS(status)) return ; if (bSign) { if (ImportKeyData(hAlg, szPrivKeyFileName, BCRYPT_RSAPRIVATE_BLOB, &hKey)) { if (SignData(hKey, szFileName, (LPBYTE)szData, sizeof(szData))) { MessageBox(TEXT("署名をしました。")); BCryptDestroyKey(hKey); } } } else { if (ImportKeyData(hAlg, szPubKeyFileName, BCRYPT_RSAPUBLIC_BLOB, &hKey)) { if (VerifyData(hKey, szFileName, &lpData, &dwDataSize)) { MessageBox( (LPTSTR)lpData); HeapFree(GetProcessHeap(), 0, lpData); BCryptDestroyKey(hKey); } } } としたのですが、 知識不足で動きません。 どのような資料を調べたらよいのでしょうか? アドバイスお願いいたします。

  • Solaris10でSendmailのBuildに失敗します。

    コンパイル環境は、 Sun Microsystems sun4v Sun Fire(TM) T1000 1.0GHz UltraSPARC T1 / 2040 Megabytes gccはデフォルトの3.4.3を利用しています。 Sendmailのソースフォルダにて下記の用にBuildを行うと エラーになります。x86環境では起きませんでした。 #./Build -c ~~~~~~~~~~~~~~~~ gcc -O -I. -I../../include -DNDBM -DNIS -DNISPLUS -DMAP_REGEX -DSOLARIS=21000 -DNETINET6 -c macro.c gcc -O -I. -I../../include -DNDBM -DNIS -DNISPLUS -DMAP_REGEX -DSOLARIS=21000 -DNETINET6 -c map.c In file included from /usr/include/rpc/rpc.h:42, from /usr/include/rpcsvc/nis.h:9, from map.c:2834: /usr/include/rpc/svc.h:19:28: sys/tsol/label.h: ファイルもディレクトリもありません。 In file included from /usr/include/rpc/rpc.h:42, from /usr/include/rpcsvc/nis.h:9, from map.c:2834: /usr/include/rpc/svc.h:86: error: syntax error before "bslabel_t" *** Error code 1 make: Fatal error: Command failed for target `map.o' Current working directory /usr/local/src/sendmail-8.13.8/obj.SunOS.5.10.sun4/sendmail *** Error code 1 The following command caused the error: for x in libsm libsmutil libsmdb sendmail editmap mail.local mailstats makemap praliases rmail smrsh vacation; \ do \ (cd $x; echo Making all in:; pwd; \ /bin/sh ./Build -c); \ done make: Fatal error: Command failed for target `all' # 何かしらわかる方がいましたら、よろしくお願いいたします。

  • 外部ソースへのリンクを含むソースのbuild.xmlの書き方は?

    現在、Eclipseで2つのプロジェクト(Lib、Toolとします)を作成しており、ToolはLibに定義された内容を用いています。 Toolは私の担当ですがLibは別の人が担当しており、まだ内容変更の可能性があるため、ソースのコピーはせず、Toolのプロジェクトの設定にて、Libのソースへのリンクを設定しました。 これでToolの(Eclipseのメニューによる)ビルドはできるようになったのですが、これをantでビルドしたいとき、build.xmlをどのように書けばよいのかわからず困っています。 Toolのビルドに先立ってLibをビルドしたいですが、Tool側にソースがないのでbuild.xmlにどう書けばよいのやら・・・という状態です。 (できるだけ「自分の環境でしか動かない」という書き方はしたくないですし。) どなたか、何かご存知ないでしょうか? 皆様の知識やお知恵を貸していただければと思います。 以下にbuild.xmlの一部を抜粋します。 ----------------------------------- <?xml version="1.0" encoding="utf-8"?> <project name="tool" basedir="."> <!-- ====================================================== --> <!-- set properties for this build --> <!-- ====================================================== --> <property name="bin" value="bin"/> <property name="dist" value="dist"/> <property name="src" value="WEB-INF/src" /> <property name="lib" value="WEB-INF/lib" /> <!-- ====================================================== --> <!-- make WAR --> <!-- ====================================================== --> <target name="compile" depends="init"> <!-- compile --> <javac srcdir="${src}" destdir="${bin}" includes="hoge/tool/*.java, hoge/util/*.java"> <classpath> <fileset dir="${lib}"> <include name="*.jar"/> </fileset> </classpath> </javac> <!-- make jar --> <jar destfile="${dist}/tool.jar" basedir="${bin}" update="true"> </jar> <!-- make war --> <war destfile="${dist}/tool.war" webxml="WEB-INF/web.xml"> <fileset dir="." includes="index.jsp, error.jsp"/> <lib dir="${lib}" includes="*.jar"/> <lib dir="${dist}" includes="tool.jar"/> <classes dir="${src}" includes="log4j.xml"/> </war> </target> ----------------------------------- このままantを実行すると、Libの内容を参照している箇所でパッケージが見つからないとかシンボルが解決できないといったエラーが出ます。 以下にエラーを抜粋します。 ----------------------------------- Buildfile: C:\eclipse_workspace\Tool\build.xml init: compile: [javac] Compiling 9 source files to C:\eclipse_workspace\Tool\bin [javac] C:\eclipse_workspace\Tool\WEB-INF\src\hoge\tool\Decoder.java:3: パッケージ hoge.lib は存在しません。 [javac] import hoge.lib.HogeException; [javac] ^ (以下省略) -----------------------------------

    • ベストアンサー
    • Java

専門家に質問してみよう