FreeLibrary()でエラー – プログラミング – Home

通知
すべてクリア

[解決済] FreeLibrary()でエラー


TERA
 TERA
(@TERA)
ゲスト
結合: 18年前
投稿: 24
Topic starter  

『開発環境』
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);

~~~~~~~~~~~~~~~~~~~~~~~


引用未解決
トピックタグ
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
 

正確にどういうプログラムなのかわからないので推測です。
キャンセルが押された時点では未だウィンドウが存在するからな。
プログラムが終了する間際でいいのかも。


返信引用
TERA
 TERA
(@TERA)
ゲスト
結合: 18年前
投稿: 24
Topic starter  

プロシージャ内の、終了は次のようにしています・・。

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);を★の箇所に書いています。
ほかの箇所に書いたりもしましたが、だめでした。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> ほかの箇所に書いたりもしましたが、だめでした。
メッセージループのところでFreeLibraryするのではなく、
WinMain内のreturn文の直前でやっても、エラーがでますでしょうか?


返信引用
TERA
 TERA
(@TERA)
ゲスト
結合: 18年前
投稿: 24
Topic starter  

Blueさま

正常に終了できました!
しかし、どうしてWinMain内のreturn文の直前だと、
正常にFreeLibraryできるのでしょうか・・・


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

たぶん超初心者さんがおっしゃっている
> キャンセルが押された時点では未だウィンドウが存在するからな。
ということで、

メッセージループの中ではウィンドウが存在する

RICHED32.DLLを使わなければならない状態

ということでしょう。(多分ウィンドウを破棄するときに必要なんだろうな)
でその前で、FreeLibraryすると都合が悪くなるということかな。


返信引用
TERA
 TERA
(@TERA)
ゲスト
結合: 18年前
投稿: 24
Topic starter  

超初心者さん Blueさん 
ご親切にどうもありがとうございました!
なるほどという感じです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました