errorの意味、原因と解決方法

[戻る]
xyz 2002/12/13(金) 09:15:27
こんにちわ、xyzといいます。お世話になります。

開発:Win2000/vc++6.0/MFC+SDK(今回はSDKで)

アプリの実行ファイルに、別途さくせいしたDLL内の関数をエクスポートして起動表示
し、後に終了すると、下記のようなエラーが出ます。

(メッセージボックス風に)
DLL Action *****Dll.exe  -アプリケーションエラー-
"0x3a7015eb"の命令が"0x00c51ec8"のメモリを参照しました。
メモリが"read"になることはできませんでした。
プログラムを終了するには「OK」をクリックしてください。

これはどのような意味で何が原因で起こったのかサッパリわかりません。同じような経
験をされた方、理解のできる方がおられましたらご教授していただけないでしょうか。
また、解決方法がありましたら幸いです。

よろしくお願いします。
                                 以上です。

へたれ 2002/12/13(金) 09:35:12
まだ Create されていないウィンドウのハンドル使用をしたり、
配列・リストなどで確保されている領域以上の部分を参照したりすると
起きるようです。

渡り鳥 2002/12/13(金) 09:39:24
DLL内でどのような処理を行っているか解かりませんが,
アプリケーションを終了させた時にDLL内で終了処理をしない時に
同じような状況が発生したことがあります.

 例:DLL内で作成したソケットを解放しないで終了した等

ちなみにMFCでした.

xyz 2002/12/13(金) 10:15:36
へたれさん、渡り鳥さん、ありがとうございます。

今のところ、DLLの作成と実装の勉強をしているところで、
「Windows2000プログラミング標準講座」の第20章DLLとセキュリティのサンプルをそ
のままコンパイル、実行して起きたものです。


BOOL WINAPI DllMain(HANDLE hInstance, DWORD what, 
                    LPVOID Notused) 
{
  switch(what) {
    case DLL_PROCESS_ATTACH:
      MessageBox(HWND_DESKTOP, "Process attaching DLL.",
                 "DLL Action", MB_OK);
      break;
    case DLL_PROCESS_DETACH:
      MessageBox(HWND_DESKTOP, "Process detaching DLL.",
                 "DLL Action", MB_OK);
      break;
    case DLL_THREAD_ATTACH:
      MessageBox(HWND_DESKTOP, "Thread attaching DLL.",
                 "DLL Action", MB_OK);
      break;
    case DLL_THREAD_DETACH:
      MessageBox(HWND_DESKTOP, "Thread detaching DLL.",
                 "DLL Action", MB_OK);
      break;
  }
  return 1;
}

上記dllmainのDLL_PROCESS_DETACHのMessageBoxを削除するとエラーはでなくなりまし
た。このまま、使っても問題はないのでしょうか。よろしくお願いします。

                               以上です。

古いスレッドには追加発言できません。