• 締切済み

イベントログの読み込み 

すみません。 教えてくださいませ。 早速ですが、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; [内容] 正常にコンパイルはするのですが、実行後エラーが出力されます。"ファイルリードエラー"(エラー文) メモリの確保がうまくいっていないのでしょうか?

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>正常にコンパイルはするのですが、実行後エラーが出力されます。"ファイルリードエラー"(エラー文) あのう、2ヶ所あるんですが。どちらで出てるか位は自分で確かめましょうね。 で、GetLastError()の値も。 VC++6で試しましたが、このソースでちゃんと1件読めますよ。アプリケーションログ、ちゃんとありますか? #確認はとりあえず読めるかだけです。終了処理とかは気にしてません。

poposan
質問者

お礼

ありがとうございました。 読めました。

関連するQ&A