fstreamを含むDLLがloaddllできないNo.03922
カモノハシ さん 04/01/26 19:33
 
こんばんは、カモノハシです。

環境
Windows 2000 sp4
秀丸 4.05 , 4.1b9〜12
BCC 5.5

で、以下のtest.cppを
「bcc32 -WD -etest.dll test.cpp」して
マクロからloaddllすると
呼び出せません。
fstreamを使わないとload出来ます。

コンパイラのせいなのかもしれませんが、他の環境がないもので(汗)
よろしくお願いいたします。

//test.cpp///////////////////////////////////
#include <windows>
#include <iostream>
#include <fstream>

using namespace std;
char* are = "ABC";
fstream teststream;

extern "C" __declspec(dllexport)int test(){
 return sizeof(are);
}

BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD ul_reason_for_call, LPVOID
pParam)
{
    switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH:
        break;

    case DLL_PROCESS_DETACH:
        break;

    case DLL_THREAD_ATTACH:
        break;

    case DLL_THREAD_DETACH:
     break;
    }
    return TRUE;
}
/////////////////////////////////////////////

//マクロ/////////////////////////////////////
loaddll "test.dll";
if(!result){
 message "ロード失敗";
 endmacro;
}
freedll:
message "成功!";
/////////////////////////////////////////////

[ ]
RE:03922 fstreamを含むDLLがloaddllでNo.03928
杉浦 まさき さん 04/01/27 01:07
 
カモノハシさん、こんばんは。

>fstreamを使わないとload出来ます。

こちらで確認してみましたが、fstream の有無に関わらず
test() は呼び出せませんでした。

で、これを回避するには以下のようなファイルを test.cpp と
同じフォルダにおいてコンパイルしてみてください。

----------- test.def -----------
EXPORTS
    test=_test
----------- test.def -----------

#より詳細なことは秀丸Q&A集の「第V部〜マクロから呼び出せる
 DLLの作り方」を参照してください。


[ ]
RE:03928 fstreamを含むDLLがloaddllでNo.03939
カモノハシ さん 04/01/27 22:28
 
レスありがとうございます。
こちらの言葉足らずでした。
defファイルはもちろん作って、エクスポートしております。

>こちらで確認してみましたが、fstream の有無に関わらず
>test() は呼び出せませんでした。
ということは、DLLのloadには成功されたんですか?
てことは私の環境依存かコンパイラが悪い可能性が
大きいってことですかねぇ…。
もうちょっとやってみることにします。

と書いてからどうやらコンパイラor環境依存が確実になりました。
普通のEXEからも読めませんでした(汗)
すっかりこの行程を飛ばしてしまっていました。
ちょっと手詰まりの感がありますが、なにが悪いのか秀丸以外から調べてみます。(g
ccとか試すべきなのかなぁ…)
お騒がせして大変申し訳ありませんでした。

[ ]