我们将 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++ 的建议在 .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 会为导入生成错误消息。
所以我被困住了。任何进一步的帮助将不胜感激。谢谢你。