c++ - 在 C++ 中用另一个 Dll 调用 Dll

标签 c++ dll mfc

我有一个 DLL,我想从另一个 DLL 中调用它。我用这段代码制作了一个 C++ MFC DLL:

    extern "C" INT PASCAL EXPORT Locale()
    {

        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        typedef BOOL(WINAPI* LPFNDLLGetStringLabel)( CWnd *, int, LPTSTR , CWinApp *, LPSTR , LPCTSTR );
        int bRes = 0; //false;
        char achEvent[ 250 ];
        HINSTANCE hDLL;   

        hDLL = LoadLibrary( L"C:\\1.dll" );
        if ( hDLL != NULL )
        {
            CString ocStrInfo;
            ocStrInfo += "Alfa";
            ocStrInfo += ";";
            ocStrInfo += "Alfa";
            ocStrInfo += ";";
            ocStrInfo += "Alfa";

                LPFNDLLGetStringLabel lpfnDllFunc;
                lpfnDllFunc = (LPFNDLLGetStringLabel)GetProcAddress( hDLL, "GetStringLabel");

                if ( lpfnDllFunc )
                    if( lpfnDllFunc( NULL, 111, (LPTSTR)ocStrInfo.GetBuffer(), AfxGetApp(), achEvent, NULL )) {
                        return bRes=1;
                    }else{
                        return bRes=0;
                    }

            FreeLibrary( hDLL );
    }
   }

以下代码正在调用第二个 DLL,但它无法正常工作:

int main(){
HINSTANCE dllHandle = LoadLibrary(L"C:\\2.dll");
if(dllHandle == NULL ){
    std::cout << "alarm";
}
typedef int(*Locale)(void);
FARPROC pTest = GetProcAddress(HMODULE (dllHandle),"Locale");
if(pTest == NULL ){
    std::cout << "alarm";
}
Locale con = Locale(pTest);
int r= 1; 
r =con();
cout << r;
FreeLibrary(dllHandle);
getchar();
return 0;

}

但是 dllhandle 等于 null...有人可以帮助我吗?

最佳答案

你可以看看 Dependency Walker .在配置文件模式 中使用此工具将向您显示您的二进制文件(EXE - DLL1 - DLL2)之间的依赖关系是否可以在运行时解决。

一个原因可能是:DLL1无法启动,因为没有找到DLL2。

你还应该看看你导出 Locale 的方式(extern "C"INT PASCAL EXPORT)是正确的!

如前所述,您还应该看看 GetLastError。

关于c++ - 在 C++ 中用另一个 Dll 调用 Dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18426592/

相关文章:

c++ - 将 CMake 与 LLVM 一起使用时出错

c++ - grpc & protobuf -- 错误:std::result_of<> 中没有名为 'type' 的类型

c - Photoshop CS5对Wintab驱动的使用

c++ - 如何在不显示 Win32 GUI 程序的控制台窗口的情况下执行子控制台程序?

c++ - MFC中如何将GUI与逻辑分离?

c++ - 尝试在 Xcode 中包含一个库,找不到文件

c++ - 当参数是数组时,C++ 如何开始和结束工作?

c# - 如何在动态创建的dll上设置版本

c# - 跟踪用于将 native C++ DLL 包装到 .NET 的 DLL 依赖项

c++ - 备份和恢复所有注册表