我有2个DLL。 DLL1将显示为MyDLL.dll,而DLL2只是一个包含MyDLL扩展名的DLL。
因此,要将这些扩展从DLL2扩展到MyDLL,我需要使用LoadLibrary()在MyDLL中加载DLL2。但是问题来了。 MyDLL包含一个函数,这在DLL2中将非常重要。我需要实现该功能。我该怎么做?

#include <Windows.h>
#include <stdio.h>
#include "DLL1API.h"

typedef DLL1API* (*PGetDLL1API)();

DLL1API *g_API;
void Init();
BOOL WINAPI DllMain(HINSTANCE hMod, DWORD dwReason, LPVOID reserve){
    switch(dwReason){
    case DLL_PROCESS_ATTACH:
        Init();
        break;
    }
}
void Init(){
    PGetDLL1API GetDLL1API;
    HMODULE mainDllMod=GetModuleHandleA("MyDLL.dll"); //how do I reach module of DLL1?
    GetDLL1API=(PGetDLL1API)GetProcAddress(mainDllMod,"GetDLL1API");
    if(GetDLL1API){
        g_API=GetDLL1API();
        printf("DLL1API: %p",g_API);
    } else { //always gets to this result :(
        printf("Error, failed to get GetDLL1API()!\n");
    }
}

另一件事是,我不敢在DLL2内使用LoadLibrary(“MyDLL.dll”),因为我认为这会导致一个大的无限loadLibrary循环(MyDll => DLL2 => MyDLL ...)

最佳答案

从DllMain内部调用LoadLibrary是not recommended。修复此问题,您的循环加载问题也将消失。

BTW DLL2不需要加载DLL1。它可以使用GetModuleHandle查找已加载的DLL传递给GetProcAddress,使用静态导入,或者DLL1可以调用DLL2导出的函数并传递一个函数指针。

  • 建议阅读的书,其中有关于LoadLibrary的特定注释:http://blog.barthe.ph/2009/07/30/no-stdlib-in-dllmai/
  • 关于c++ - 如何从加载器DLL获取函数地址?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21194336/

    10-12 04:58