DLL解放後にアクセス違反が発生します。 – プログラミング – Home

DLL解放後にアクセス違反が発生します...
 
通知
すべてクリア

[解決済] DLL解放後にアクセス違反が発生します。


平井
 平井
(@平井)
ゲスト
結合: 24年前
投稿: 48
Topic starter  

開発環境 VC6.0 Windows2000SP2 MFC

DLLをLodaLibrary()でロードして、GetProcAddress()で関数ポインタを取得し、
関数を使用した後でFreeLibrary()すると次のエラーがでます。
----------------------------------------------------------------------
例外処理(初回)は ***.exe にあります。: 0xC0000005: Access Violation。
----------------------------------------------------------------------

Access Violationの発生するタイミングは毎回微妙に異なります。

DLLから取得して実行した関数はスレッドを生成しますが、FreeLibrary()を
呼び出す前には必ず終了させています。

LodaLibrary()とFreeLibrary()の代わりにAfxLoadLibrary()と
AfxFreeLibrary()を使ってみましたが何も変わりませんでした。

何か注意すべきこと、調べるべきことがありましたらご教授下さい。


引用未解決
トピックタグ
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

>DLLをLodaLibrary()でロードして、GetProcAddress()で関数ポインタを取得し、
>関数を使用した後でFreeLibrary()すると次のエラーがでます。
コードについての説明なのか、エラーが起きる条件なのかがはっきり
しません。そこで、以下の質問にお答え願えませんか

FreeLibrary しなければ例外は発生しないのですか?
函数を呼ばなければ例外は出ませんか?


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

> FreeLibrary しなければ例外は発生しないのですか?

発生しません。FreeLibrary後しばらくしてから(実行時間では一瞬)例外が発生します。
デバッグしているのですがどこで例外が発生しているのか追いきれないのです。

> 函数を呼ばなければ例外は出ませんか?

次のような状況です。

LoadLibrary() → DLL関数使用  → FreeLibrary()  //例外発生
LoadLibrary() → DLL関数未使用 → FreeLibrary()  //例外発生せず
LoadLibrary() → DLL関数使用             //例外発生せず

可能性として考えているのは、
・DLLから取得した関数Aの実行によりスレッド生成
・DLLから取得した関数Bの実行によりスレッド終了(のつもりが実は別スレッドが生きてい
る)
・LoadLibrary()により解放(→実行中のコードを解放してしまった。)
という流れです。

なお、XとYという同じ関数群(同じ関数名)を持つ2つのDLLが存在し、
例外はYのみで発生致します。


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

結局問題は解決しませんでしたが、DLLをアプリケーション終了まで
解放しないことで対処することにしました。
原因を少しでも考えてくださった皆様ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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