C++ プログラムを DLL としてコンパイルし、VB6 から使用したいと考えています。プログラムには次のようなサブルーチンがあります
int __stdcall setup(int exposure_time, double shutter, double gain, int numImages) {
....
}
int __stdcall test() {
return 8;
}
また、Def ファイルは次のように定義されます。
LIBRARY
EXPORTS
setup=setup
test=test
そして、VB6 で次のように宣言しています。
Public Declare Function setup Lib "C:\MyDll.dll" () As Long
Public Declare Function test Lib "C:\MyDll.dll" () As Long
そして、フォームでアクセスしようとしています:
Private Sub Form_Load()
Debug.Print (test())
End Sub
しかし、実行が最初の関数呼び出しに到達すると、VB で「ファイルが見つかりません」というメッセージが表示されます。MyDll.dll プログラムは宣言された場所にあり、登録されません。宣言するために何が欠けていますか?
バテシバさん、こんにちは。
私はあなたの提案に従いましたが、VB プログラムはまだ dll を見つけることができませんでした。
VB での宣言:
Public Declare Function setup Lib "C:\Math\FlyCapture2\bin\PGLCTrigger.dll" ( _
ByVal exposure_time As Long, _
ByVal shutter As Double, _
ByVal gain As Double, _
ByVal numImages As Long) As Long
Public Declare Function test Lib "C:\Math\FlyCapture2\bin\PGLCTrigger.dll" () As Long
定義ファイル:
LIBRARY
EXPORTS
setup=@1
test=@2
C++ プログラム:
__declspec(dllexport) int __stdcall setup(int exposure_time, double shutter, double gain, int numImages) {
....
}
__declspec(dllexport) int __stdcall test() {
return 8;
}
VB 呼び出しプログラム:
Private Sub Form_Load()
setup 12, 24#, 1#, 10
test
End Sub
実行が上記のプログラムのセットアップ行に到達するとすぐに、「dll が見つかりません」というエラーが発生します。
Compile a DLL in C/C++, then call it from another program で提案されているように、.def ファイルに次のように定義しました。
//DLL Export-Import definitions
#ifdef BUILD_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
DLLの関数を次のように参照できるように
EXPORT int __stdcall setup(int exposure_time, double shutter, double gain, int numImages)
ただし、VS2010 はインポートのエラー メッセージを生成します。
だから私は立ち往生しています。それ以上の助けをいただければ幸いです。ありがとうございました。