『開発環境』
WindosXP
VC2003
SDK
以下のようなコードを実行すると、
FreeLibrary(g_hRtLib)のところで「ハンドルされていない例外が発生しました」と
エラーがでて正常に終了できません。
これはいったいなぜなのでしょうか。
g_hRtLib = LoadLibrary(RICHED32.DLL) はWinMain()の中にあることが前提として、
解決策がありましたら、教えてください。
~~~~~~~~~~~~~~~~~~~~~~~
グローバル領域
HINSTANCE g_hRtLib;
WinMain()内
g_hRtLib = LoadLibrary(RICHED32.DLL);
WinMainのプロシージャ内
case IDCANCEL :
FreeLibrary(g_hRtLib);
~~~~~~~~~~~~~~~~~~~~~~~
正確にどういうプログラムなのかわからないので推測です。
キャンセルが押された時点では未だウィンドウが存在するからな。
プログラムが終了する間際でいいのかも。
プロシージャ内の、終了は次のようにしています・・。
switch (message) {
case WM_COMMAND :
switch (LOWORD (wParam)) {
case IDM_END :
case IDCANCEL :
★
DestroyWindow(hWnd);
}
return TRUE;
case WM_CLOSE:
PostMessage(hWnd,WM_COMMAND,IDCANCEL,0);
return TRUE;
case WM_DESTROY :
PostQuitMessage (0);
}
return FALSE;
}
FreeLibrary(g_hRtLib);を★の箇所に書いています。
ほかの箇所に書いたりもしましたが、だめでした。
> ほかの箇所に書いたりもしましたが、だめでした。
メッセージループのところでFreeLibraryするのではなく、
WinMain内のreturn文の直前でやっても、エラーがでますでしょうか?
Blueさま
正常に終了できました!
しかし、どうしてWinMain内のreturn文の直前だと、
正常にFreeLibraryできるのでしょうか・・・
たぶん超初心者さんがおっしゃっている
> キャンセルが押された時点では未だウィンドウが存在するからな。
ということで、
メッセージループの中ではウィンドウが存在する
↓
RICHED32.DLLを使わなければならない状態
ということでしょう。(多分ウィンドウを破棄するときに必要なんだろうな)
でその前で、FreeLibraryすると都合が悪くなるということかな。
超初心者さん Blueさん
ご親切にどうもありがとうございました!
なるほどという感じです。