【发布时间】:2015-04-16 15:09:48
【问题描述】:
有没有办法让我使用来自 VB6 应用程序或 VSC++ 的 dll 而没有头文件? 我有 dll 和 .lib,并尝试执行以下操作来加载 dll。
FunctionCalledType calledPTR = NULL;
hDLL = LoadLibrary(_T("called.dll"));
if (hDLL == NULL) {
std::cerr << "DLL called.dll could not be found!";
return 2;
}
calledPTR = (FunctionCalledType)GetProcAddress(hDLL, "FunctionCalled");
if (NULL != calledPTR)
{
std::cout << "Got Function";
calledPTR("fileA.bz", "fileA.txt");
}
else{
std::cerr << "Didn't got function";
return 3;
}
return 0;
代码运行良好,但我得到一个内存访问错误
calledPTR("fileA.bz", "fileA.txt");
其中FunctionCalledType定义如下:
typedef string(CALLBACK* FunctionCalledType)(string, string);
生成 dll 的 VB6 代码如下:
Public Function FunctionCalled(src As String, dest As String) As String
//Some code
End Function
我猜我指向函数的指针格式错误,或者我以错误的方式包含了 dll
【问题讨论】:
-
VB6 DLL 是基于 COM 的,它不导出任何东西(除了 RegisterServer)
-
这一切似乎都令人难以置信。 VB6 不支持创建非托管 DLL。这似乎不太可能真的是一个 VB6 DLL。当然,您不能将 C++
std::string映射到 VBString。 -
@AlexK。这个 DLL 似乎导出了一个名为
"FunctionCalled"的函数,因为根据提问者的说法,GetProcAddress成功了。 -
到 std::cout
-
@FabioCosta 当你说这个 DLL 是由 VB6 制作时,我根本不相信你。因为,开箱即用,VB6 不能做你声称它可以做的事情。此外,从您尝试的类型映射来看,您似乎对互操作知之甚少。您可能需要认识到自己的知识缺陷并加以纠正。对不起。
标签: visual-c++ dll vb6 dllimport