DLL导出由VB6调用的C / C ++ 6.00函数

时间:2010-06-17 19:27:50

标签: c++ vb6 dll

我一直试图创建一个可以被VB6访问的带有C / C ++的DLL,这是正确的我从VB6调用函数时得到错误“453在myDllName.dll中找不到DLL入口点myFunctionName”应用程序。 在搜索了网站(包括这个网站)之后,我发现我并不孤单,我已经尝试了各种解决方案,但错误“453”是无法实现的。 这不是一个COMM dll,我相信这可以通过C / C ++创建。  无论如何,如果可以的话,请帮忙。请参考下面的简单测试用例:

作为C / C ++ 6.00 Win32动态链接库创建的DLL:

#include <Windows.h>   

// Note that I did try the line below rather than the def file, but to no avail...  
// #pragma comment(linker, "/EXPORT:ibask32=_ibask32@0")

// Function definition   
extern "C" int __declspec(dllexport) __stdcall ibask32()   
{   
    MessageBox(NULL,"String","Sample Code", NULL);   
    return 0L;   
}   

def文件:

LIBRARY "Gpib-32"
EXPORTS   
ibask32

现在为VB App:

以下是启动Form1,Form_Load

的全部内容
Option Explicit
 Private Sub Form_Load()
  Call ibask
 End Sub

以下是添加到项目中的BAS模块文件:

Option Explicit

Declare Function ibask32 Lib "Gpib-32.dll" Alias "ibask" () As Long

Sub ibask()

    Call ibask32   ' Note: This is the point of failure

End Sub

如果能提供可行的解决方案,请提前致谢 汤姆

1 个答案:

答案 0 :(得分:1)

你正在尽我所能地做正确的事。通过在DLL上运行Dumpbin.exe / exports验证您的假设。这显示了导出函数的实际名称,它必须与VB6声明中的Alias匹配。

我能想到的唯一其他失败模式是VB6加载错误的DLL。如果要从VB6 IDE中使用它,它必须存在于PATH上列出的目录中。通过从命令行运行“where gpib-32.dll”来验证。