LoadLibraryに失敗する – プログラミング – Home

通知
すべてクリア

[解決済] LoadLibraryに失敗する


tenteku
 tenteku
(@tenteku)
ゲスト
結合: 15年前
投稿: 38
Topic starter  

VS2008SP1 WinXP

LoadLibraryに失敗して困っています。確認したことは
・Unicode C/C++コマンドラインでUNICODEを確認
・ファイルのパス static CFile::GetStatusがFALSEでないものをロード
どこかのコードを追加した際、急にこの現象が起こるようになったことはわかっています。

出力は

'D:\xxxx\yyyy.dll' を読み込みました。シンボルが読み込まれました。
'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcp90d.dll'
を読み込みました。シンボルが読み込まれました。
CArchive exception: readOnly.
0x7c812afb で初回の例外が発生しました: Microsoft C++ の例外: CArchiveException
(メモリの場所 0x0012e23c)。
'D:\xxxx\yyyy.dll' をアンロード
'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcp90d.dll'
をアンロード

こんな感じで、LoadLibraryした後の戻り値ハンドルがNULLです。
おそらく自作のyyyy.dllが悪いのでしょうけれど、ハンドルがNULLですと
悪いコード位置にたどり着けないので皆様のお力をお借りしたく。。


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

なんか深読みしすぎな希ガス

重要なメッセージは CArchive exception: readOnly.
MFC ソースをちょっと追いかけるとこのメッセージは
CArchive::Write(), CArchive::WriteObject が !IsStoring() なときに出力されるとわ
かる。

単に Serialize の際の << と >> が逆向いてるだけだと思うが。


返信引用
tenteku
 tenteku
(@tenteku)
ゲスト
結合: 15年前
投稿: 38
Topic starter  

CArchiveを洗いなおしたら解決できました。ありがとうございます

CFileStatus fst;
if(CFile::GetStatus(lib_path, fst))
{
m_hDll = ::LoadLibrary(lib_path);
if(m_hDll)
{
...
}
else
{
::AfxMessageBox(error1);//動かない
}
}
この問題が起きているときAfxMessageBoxも動かなくなってしまうので一体何が。。。
とあせってました。直接の原因は>>では無かったですけど簡単なミスでした.


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

提示コードで LoadLibray 失敗の AfxMessageBox も表示されない、となると、
それは LoadLibrary 中に例外が投げられて unwind されているってことだ。
となると DllMain で例外投げてるということなのだろうけど、
DllMain 内部でやってよいことって制約があるので注意。
http://msdn.microsoft.com/ja-jp/library/aa290048(v=vs.71).aspx
ここんちの過去ログでもこんなのがあるし
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+201002/10020006.txt
今のうちにじっくり見直すほうがよさそう。


返信引用
tenteku
 tenteku
(@tenteku)
ゲスト
結合: 15年前
投稿: 38
Topic starter  

参考になります。ありがとうございました!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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