找不到从VB6调用的C ++ DLL程序

用户名

我们将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

Def文件:

 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”错误。

我按照在C / C ++中编译DLL的建议在.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会为导入生成一条错误消息。

所以我被困住了。任何进一步的帮助将不胜感激。谢谢你。

大卫·赫弗南(David Heffernan)

其他人告诉您,必须声明该函数的参数。如果该DLL无法加载,并且您确定它在那里,则很可能缺少依赖项。使用Dependency Walker调试它。加载可执行文件,然后从“配置文件”菜单以配置文件模式运行它。这将记录加载程序事件,您将确切看到失败的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

找不到实体框架提供程序-从VB6内部调用C#Com DLL

VB6程序看不到VB.Net COM DLL的属性

'找不到DAO350.dll'文件错误VB6

如何从内存中释放在VB6应用程序中调用的.Net DLL?

如何从VB6应用程序将char参数传递到C DLL?

从VB6调用C ++ DLL传递垃圾数据作为参数吗?

如何从AutoHotkey脚本调用vb6中编码的.dll?

尝试从C#调用VB6应用程序时出现文件/访问错误

从C#应用程序调用C ++ dll时找不到Enry点

找不到dll程序集或依赖项

VB6调用WCF:找不到终结点元素

vb6连接到mysql:[Microsoft] [ODBC驱动程序管理器]找不到数据源名称,未指定默认驱动程序

VB6连接到MySQL5.7.16 [Microsoft] [ODBC Driver Manager]找不到数据源名称,未指定默认驱动程序

在不安装或注册dll的情况下运行VB6应用程序

在Windows 10上安装VB6应用程序时缺少DLL

强制VB6编译器在调用.net com dll时使用早期绑定

ElastAlert 导入错误:DLL 加载失败:找不到指定的程序

Symfony找不到mongodb驱动程序(DLL)

ClickOnce部署的应用程序找不到外部DLL

如何将.NET COM dll中的结构或类返回到使用中的VB6应用程序?

调试vb6程序时出现错误错误的调用约定

Qt应用程序从Fortran调用Dll

如何从调用程序访问DLL的变量?

vb6到vb.net dll兼容版本

c#找不到文件或程序集cefsharp.core.dll

迁移VB6应用程序

在VB6程序中插入Gif

从C#dll库读取VB6项目的app.config

来自VB6 DLL的枚举值未出现在C#中