【发布时间】:2014-02-07 06:45:21
【问题描述】:
我有 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 ...)
【问题讨论】:
-
先加载DLL1,再加载DLL2;在 DLL2 中添加一个函数
setupCore(void (*funtion_ptr)())(或类似的东西),并将所需函数的地址从 DLL1 传递给它。