ゲームには少し遅れていますが、問題は、C++ Builder がエクスポートされた関数の先頭にアンダースコアを付けていることかもしれません。コマンド ライン ユーティリティは、これを証明するのTLIB
に役立ちます (tlib がまだ C++Builder に同梱されていると仮定します)。
TLIB mydll.lib, mydll.lst
結果の lst ファイルを見て、StartTest
またはが含まれているかどうかを確認します_StartTest
。LabView はおそらくアンダースコアのない関数を見つけることを期待しています。
先頭のアンダースコアを抑制する DEF ファイルを C++Builder プロジェクトに追加できます。これを試して:
__stdcall の代わりに __cdecl 呼び出し規約を使用します。
プレーンな「C」関数をエクスポートします。C++ クラスまたはメンバー関数はありません。
- 関数プロトタイプの周りに extern "C" {} があることを確認してください。
エクスポートされた関数を Microsoft 互換の名前にエイリアスする DEF ファイルを作成します。先頭のアンダースコアが含まれないように、名前に別名を付けます。DEF ファイルは次のようになります。
輸出; MSVC 名 = C++Builder 名 StartTest = _StartTest Foo = _Foo Bar = _Bar
5- DEF ファイルを BCB DLL プロジェクトに追加し、再構築します。
詳細については、これらの古い記事を参照してください:
http://bcbjournal.org/articles/vol4/0012/Using_Visual_C_DLLs_with_CBuilder.htm
逆の記事 (VC++ で作成されたアプリケーションから呼び出される C++Builder DLL の作成) は、このアーカイブに埋もれています。
http://www.frasersoft.net/program/bcbdev.zip : /articles/bcbdll.htm。DEF ファイルのトリックの詳細と、その他のオプションについて説明します。
私の答えは、1998 年ごろの状況に基づいていることに注意してください。それ以来、それらは変更されている可能性があります。ある場合、C++Builder コマンド ライン ツールの impdef、tlib、tdump、およびこれらのツールに相当する Microsoft は、DLL と MSVC の内容を正確に表示できるはずです。
H^2