※ ChatGPTを利用し、要約された質問です(原文:BCBで作成したDLLを、VC++で静的リンクさせる方法)
BCBで作成したDLLを、VC++で静的リンクさせる方法
このQ&Aのポイント
Borland C++ Builderで作成したDLLを、VC++アプリケーションで利用できるようにLIBファイルに変換する方法について教えてください。
BCBでDLLを作成し、IMPDEF.exeを使用してdefファイルを作成しました。その後、LINK.exeとLIB.exeを使用してlibファイルを作成し、VC++プロジェクトに追加しましたが、ビルド時にエラーメッセージが表示されます。
BCBとVC++のバージョンは、BCB Professional 6.0とVC++ 6.0です。解決策を教えていただけると助かります。
BCBで作成したDLLを、VC++で静的リンクさせる方法
BCBで作成したDLLを、VC++で静的リンクさせる方法
Borland C++ Builderで作成したDLLを、VC++アプリケーションで利用できるように
LIBファイルに変換したいのですが、上手くいきません。
下記の手順を踏みました。
1. BCBでDLL作成
「VC++スタイルのDLL」で作成、
「VCLを使う」「CLXを使う」「マルチスレッドを使う」はチェックせず
2. コマンドラインで「IMPDEF.exe」を使用して、dllからdefファイル作成
(IMPDEF.exeは、\Borland\CBuilder6\Binに格納されていた)
3. コマンドラインで「LINK.exe」「LIB.exe」を使用して、defからlibファイル作成
(LINK.exeとLIB.exeは、\Microsoft Visual Studio\VC98\Binに格納されていた)
4. VC++プロジェクトファイルを保存したフォルダに、DLLファイルとlibファイルをコピー
5. VC++の「プロジェクト」-「設定」-「リンク」-「オブジェクト/ライブラリモジュール」に
作成したlibファイルを追加
VC++プロジェクトをビルドすると、下記のエラーメッセージが表示されます。
/////////////////////////////////////////////////////////////////////////////////
dllread.obj : error LNK2001: 外部シンボル "__imp__(関数名)@0" は未解決です
LIBC.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Release/dllread.exe : fatal error LNK1120: 外部参照 2 が未解決です。
link.exe の実行エラー
/////////////////////////////////////////////////////////////////////////////////
BCBとVC++のバージョンは、下記の通りです。
BCB Professional 6.0
VC++ 6.0
ちなみに、同じDLLを動的リンクで利用することは出来ました。
初心者の質問で申し訳ございませんが、解決策が分かる方がいらっしゃいましたら
教えていただけないでしょうか?
お礼
ご指摘の通り、読み出し側プロジェクトの宣言から 「__stdcall」を削除したら解決しました。 「VC++」で作成したDLL ⇒ LIBファイルに変換して「VC++」で読み込み 「VC++」で作成したDLL ⇒ LIBファイルに変換して「BCB」 で読み込み 「BCB」 で作成したDLL ⇒ LIBファイルに変換して「BCB」 で読み込み の時は「__stdcall」や「WINAPI」が付いていても読み込めるのですが 質問のケースでは読み込めないのですね。 勉強になりました。 ありがとうございました。
補足
返答が遅くなり、申し訳ありません。 DLLの宣言は extern "C" __declspec(dllexport) int __stdcall (関数名)(void); 読み出し側の宣言は extern "C" __declspec(dllimport) int __stdcall (関数名)(void); BCBでは上記の宣言でLIBファイルを読み出せたのですが、 VC++では__stdcallを付けてはいけないのでしょうか? なお、読み出し側のプロジェクトファイルを、コンソールで作り直したら エラーが1つ消えました。 ///////////////////////////////////////////////////////////////////////////////// dllread.obj : error LNK2001: 外部シンボル "__imp__BCBDLLTEST@0" は未解決です Debug/dllread.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー /////////////////////////////////////////////////////////////////////////////////