- 締切済み
イベントログの読み込み
すみません。 教えてくださいませ。 早速ですが、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; [内容] 正常にコンパイルはするのですが、実行後エラーが出力されます。"ファイルリードエラー"(エラー文) メモリの確保がうまくいっていないのでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>正常にコンパイルはするのですが、実行後エラーが出力されます。"ファイルリードエラー"(エラー文) あのう、2ヶ所あるんですが。どちらで出てるか位は自分で確かめましょうね。 で、GetLastError()の値も。 VC++6で試しましたが、このソースでちゃんと1件読めますよ。アプリケーションログ、ちゃんとありますか? #確認はとりあえず読めるかだけです。終了処理とかは気にしてません。
お礼
ありがとうございました。 読めました。