如何在没有 header 的情况下在 VC++ 上调用 Vb6 dll
How to call Vb6 dll on VC++ without the header
有没有办法让我在没有 header 文件的情况下使用来自 VSC++ 的 VB6 应用程序的 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 具有的 4 个导出函数。
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
如果您的代码在 class 模块中,您可以基于 VB6 的 class 模块创建一个对象,然后将该函数作为方法调用。
你不想学习 COM 很好。几乎没有这个工作的机会。
有没有办法让我在没有 header 文件的情况下使用来自 VSC++ 的 VB6 应用程序的 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 具有的 4 个导出函数。
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
如果您的代码在 class 模块中,您可以基于 VB6 的 class 模块创建一个对象,然后将该函数作为方法调用。
你不想学习 COM 很好。几乎没有这个工作的机会。