1

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 はインポートのエラー メッセージを生成します。

だから私は立ち往生しています。それ以上の助けをいただければ幸いです。ありがとうございました。

4

2 に答える 2

0

の関数引数について VB6 に伝える必要がありますsetup

Public Declare Function setup Lib "C:\MyDll.dll" ( _
    ByVal exposure_time As Long, _
    ByVal shutter As Double, _
    ByVal gain As Double, _
    ByVal numImages A Long) As long

そして、あなたの .def ファイルは間違っていると思います。私が使う

EXPORTS
   setup @1
   test @2

ここで、1 と 2 は任意ですが、序数と呼ばれる別個の正の整数です。いくつかのコメント:

LongVBの AはintC++ の an です。

.def ファイルの代わりに__declspec(dllexport)andを使用できます。extern "C" {/*your function here*/}

于 2013-10-01T15:45:24.367 に答える