如何在没有 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 很好。几乎没有这个工作的机会。