ダミーDLL

[戻る]
wind 2002/07/26(金) 15:20:34
こんにちは、windです。
DLLについて質問があります。
環境はWin2000、VS6.0SP2です。

abc.dll(MFCのスタティックライブラリを使用で作成)という既存のDLLがあります。
現在、xyz.dllでabc.libとabc.hファイルをインクルードしてビルドし、abc.dllを呼び出して
います。

ここで、abc.dllのダミーDLLを作成し、そのDLLを本物のabc.dllと入れ替えると上手くいきま
せん。
ダミーDLLの作成方法は以下の通りです。
・もとのabc.dllと同じプロジェクト名、DLL名
・MFCのスタティックライブラリを使用で作成
・ファイル構成が違う
・xyz.dllで呼び出される関数宣言は同じ方法で記述(関数内部は違う動き)
・呼び出されない関数は記述してない

以上の方法で作成したDLLを本物のDLLと置き換えたのですが上手くいきません。
ここで、ダミーDLLのヘッダーファイルとlibファイルを使用してxyz.dllのビルドはしてませ
ん。以前のabc.dllでビルドされた状況です。
なんとかDLLだけを置き換えて実行させたいのですが、いい方法はないでしょうか?

よろしくお願いします。

クラフトマン 2002/07/26(金) 16:03:49
エクスポートはどのようにしていますか?
__declspec(dllexport)を使っている場合は、序数の制御が出来ないので、DLL側の構成が
変わった場合は、EXE側もリビルドしなければなりません。
EXE側をリビルドしなくても済むようにするには、DEFファイルを使ってエクスポートする必要
があります。

EXPORTS
    func1    @1
    func2    @2
    func3    @3

のようにしておけば、途中の関数を削ったり、新しい関数を挿入したりしても、序数が変化
しないことが保証されます。
#関数名の修飾には注意してください

詳細は、MSDNで、『エクスポート方式』等で検索すると出てくると思います。

wind 2002/07/26(金) 16:19:55
windです。
さっそくのご回答ありがとうございます。

>エクスポートはどのようにしていますか?
>__declspec(dllexport)を使っている場合は、序数の制御が出来ないので、DLL側の構成が
>変わった場合は、EXE側もリビルドしなければなりません。
>EXE側をリビルドしなくても済むようにするには、DEFファイルを使ってエクスポートする必要
>があります。

DEFファイルを使用してますが、うまくいきません。
やはりダミーのヘッダーとlibでビルドし直さなければならないのでしょうか?

dairygoods 2002/07/26(金) 16:29:54
DUMPBIN /EXPORT [DLL名]
でエクスポート関数の一覧を表示できます。
(DUMPBINは、VC++付属ツール)

2つのDLLで、序数(ordinal)と名称が一致しているか
確認してみてください。

どうでもいいやつ 2002/07/26(金) 16:47:19
> DUMPBIN /EXPORT [DLL名]
/EXPORTS ですね。

wind 2002/07/26(金) 17:01:58
序数は合ってました。
しかし、Summaryの.data部分が
本物DLL 7000 .data
偽者DLL 8000 .data
になっていました。

Summaryというのはなんでしょうか?また、これが関係あるのでしょうか?

よろしくお願いします。

古いスレッドには追加発言できません。