【VC++6.0】ReleaseモジュールだとLoadLibrary()が0x00を返す – 固定ページ 2 – プログラミング – Home

【VC++6.0】Releaseモジュ...
 
通知
すべてクリア

[解決済] 【VC++6.0】ReleaseモジュールだとLoadLibrary()が0x00を返す

固定ページ 2 / 2

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

ちなみに、DLL内にて下記のようなコーディングになっておりまして
★の行のみコメントアウトする事でReleaseでビルドしたDLLが
呼び出せるようになりました。

---
#pragma data_seg(.shared1)
static UINT カウンタ = 0;
#pragma data_seg()
 ・
 ・
 ・
extern C
void APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID
lpReserved )
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
★ ++カウンタ;
break;
case DLL_PROCESS_DETACH:
★ --カウンタ;
break;
}
return;
}
---


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

一種の参照カウンタを共有領域におきたいという気持ちのコードですね。

やったことありませんが。名前つきデータセクションを使用する場合は
*.defファイルで指定(SECTIONS)するか、
リンカーに教える(/SECTION)必要があるそうです。
その部分が欠落しているのではないでしょうか。

そうするとリリースだけで動かなくなるんですね。「10へぇ~」


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

あれ? 良く見ると*.defに指定がありますねぇ。不思議だ。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

http://msdn.microsoft.com/ja-jp/library/sf9b18xk(VS.100).aspx
defファイル以外に、リンクの設定も必要みたいですね。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

DllMain の戻り値は BOOL型で
DLL_PROCESS_ATTACH のときは TRUE を返さなければいけないのでは?
このコードで動く方が不思議な気がしますが。。。


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

>>仲澤@失業者さん
>>ITOさん
>>subaruさん
ありがとうございます!!!

subaruさんのおっしゃる通り、DllMain()をvoidからBOOLに変更し
TRUEを返すように変更する事で、上記★のカウンタ操作をコメント
アウトする事なく、ReleaseビルドしたDLLが正常に動作しました。

重ね重ね、本当にありがとうございました。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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