在VB6中使用C ++ DLL

时间:2011-01-28 15:32:01

标签: c++ dll vb6 dllexport

我刚在MSVC ++ 2010中为我的老板创建了一个DLL。我选择“新Win32 DLL”选项“导出符号”,所以,一切都是完全标准的。新项目文件中有一些预定义的导出,一个类,它的构造函数,一个带有伪值的全局函数和变量,以及一个带有APIENTRY函数的文件dllmain.cpp。我什么都没改变。

现在我的老板想在他的VB6项目中使用导出的东西。他开始了一个VB6项目,做了菜单“Project” - “Links”(从德语翻译成英语,所以它可能有所不同,但我确定你知道我的意思)并选择了一个DLL文件,正如他所说的那样通常会。

但是,VB6无法包含它,而是显示错误消息“无法包含DLL文件”(没有给出真正的理由)。 Visual C ++ 6中标准的新DLL项目也是如此。我的老板认为这可能是因为符号没有真正导出或者VB6需要一些特殊的声明。有谁知道问题是什么?

5 个答案:

答案 0 :(得分:6)

是的,VB6不能那样工作。您需要在VB代码中声明DLL函数,如下所示:

Private Declare Function WinHelp Lib "user32" Alias "WinHelpA" _
  (ByVal hwnd As Long, ByVal lpHelpFile As String, _
  ByVal wCommand As Long, ByVal dwData As Long) As Long

您可以将“user32”替换为“MyCPlusPlusDLL.dll”,并使用DLL中的实际方法名称和签名等。然后将DLL放在/ System文件夹中,你应该好好去。

注意:这是假设C ++ DLL中的方法是用“__declspec”声明的。

答案 1 :(得分:2)

我看到你已经接受了答案,但这可能对你或其他人有用。 Paul Caton The Universal DLL Function caller使用汇编语言voodoo来使VB6能够调用通常不能从VB6调用的不同类型的DLL函数。

答案 2 :(得分:1)

在C ++中制作DLL并从VB6中使用它的最简单方法是使用COM。

答案 3 :(得分:1)

对于常规DLL,您不能使用VB引用,而是需要使用Declare statement。另一种选择是将DLL创建为ActiveX component

答案 4 :(得分:1)

如果它不是COM库,则只需要导出__stdcall的C函数。您可能需要为它们创建.def文件(http://msdn.microsoft.com/en-us/library/d91k01sh(VS.80).aspx)。还使用依赖性walker,例如depends.exe查看导出的函数和名称。