我刚在MSVC ++ 2010中为我的老板创建了一个DLL。我选择“新Win32 DLL”选项“导出符号”,所以,一切都是完全标准的。新项目文件中有一些预定义的导出,一个类,它的构造函数,一个带有伪值的全局函数和变量,以及一个带有APIENTRY函数的文件dllmain.cpp。我什么都没改变。
现在我的老板想在他的VB6项目中使用导出的东西。他开始了一个VB6项目,做了菜单“Project” - “Links”(从德语翻译成英语,所以它可能有所不同,但我确定你知道我的意思)并选择了一个DLL文件,正如他所说的那样通常会。
但是,VB6无法包含它,而是显示错误消息“无法包含DLL文件”(没有给出真正的理由)。 Visual C ++ 6中标准的新DLL项目也是如此。我的老板认为这可能是因为符号没有真正导出或者VB6需要一些特殊的声明。有谁知道问题是什么?
答案 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查看导出的函数和名称。