3

以下のようにデルファイで関数を作成しました: function CheckResult():integer; stdcall; export;

コンパイラは Delphi 64 で、出力は CheckFunctions.dll です。

次に、VC++ プロジェクト (VS 2012) で、次のように記述します。 extern "C" __declspec(dllimport) int __stdcall CheckResult();

関数で使用すると、C++ プロジェクトでコンパイラ エラーが発生します。

エラー LINK2019: 未解決の外部シンボル __imp_CheckResult が関数で参照されています*

どのようにできるのか?ありがとう

4

3 に答える 3

3

DLL のインポート ライブラリ (.lib ファイル) がありません。そのため、リンカーはそのエラー メッセージを表示しています。残念ながら、Delphi は .lib ファイルを生成しません。これは、私の見解では少し弱点です。

次のいずれかで問題を解決できます。

  1. LoadLibrary/GetProcAddress と連携。
  2. 適切な .lib ファイルを生成します。

オプション 2 は簡単です。Visual Studio で偽の DLL プロジェクトを作成します。Delphi DLL と同じ関数をエクスポートするように手配します。これらの関数を空のスタブで実装します。__declspec(dllexport) ではなく .def ファイルを使用して、エクスポートの名前装飾を回避します。

本当に一目瞭然です。本物の DLL と同じインターフェイスを持つ偽の DLL を作成します。同じ名前、同じ機能。Delphi では作成できない .lib ファイルを MS ツールで作成するだけなので、偽の DLL を実装する必要はありません。

詳細はこちら: http://support.microsoft.com/kb/131313


FWIW Delphi エクスポート修飾子は無視されていると思います。代わりに exports 節を使用してください。

于 2013-05-30T15:49:00.210 に答える
2

VC のコマンドラインLIBユーティリティを使用して、DLL 用の VC 互換のインポート .lib ファイルを作成し、そのファイルを VC プロジェクトに追加します。

于 2013-05-30T18:24:12.343 に答える