如何在没有标题的情况下在VC ++上调用Vb6 dll

时间:2015-04-16 15:09:49

标签: visual-c++ dll vb6 dllimport

有没有办法让我使用来自VB6应用程序的dll而没有头文件的VSC ++? 我有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

1 个答案:

答案 0 :(得分:1)

这些是VB6.dll的4个导出函数。

DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer

如果您的代码在类模块中,则基于VB6的类模块创建对象,然后将该函数作为方法调用。

你不想学习COM很好。这种工作几乎没有机会。