• ベストアンサー
※ 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です。解決策を教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • gentoo314
  • ベストアンサー率41% (15/36)
回答No.1

詳しくはよくわからないのですが、気になるところだけ。 _imp__(関数名)@0 関数名に @ がつくのは、__stdcall タイプの関数です。 プロトタイプ宣言に、__stdcall または WINAPI が付いていませんか。 DependencyWalker で、DLLのエクスポート関数名を見てみましょう。

j_otxoa
質問者

お礼

ご指摘の通り、読み出し側プロジェクトの宣言から 「__stdcall」を削除したら解決しました。 「VC++」で作成したDLL ⇒ LIBファイルに変換して「VC++」で読み込み 「VC++」で作成したDLL ⇒ LIBファイルに変換して「BCB」 で読み込み 「BCB」 で作成したDLL ⇒ LIBファイルに変換して「BCB」 で読み込み の時は「__stdcall」や「WINAPI」が付いていても読み込めるのですが 質問のケースでは読み込めないのですね。 勉強になりました。 ありがとうございました。

j_otxoa
質問者

補足

返答が遅くなり、申し訳ありません。 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 の実行エラー /////////////////////////////////////////////////////////////////////////////////

関連するQ&A