我有2個DLL。 DLL1將顯示爲MyDLL.dll,而DLL2只是一個包含MyDLL擴展名的DLL。 因此,要將這些擴展從DLL2擴展到MyDLL,我需要使用LoadLibrary()在MyDLL中加載DLL2。但問題來了。 MyDLL包含一個函數,這在DLL2中非常重要。我需要達到這個功能。我該怎麼做?如何從加載程序DLL獲取函數地址?
#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");
}
}
另一件事是,我很害怕使用調用LoadLibrary( 「MYDLL.DLL」)內DLL2,因爲我認爲這會造成一個大無限循環調用LoadLibrary(MYDLL => DLL 2 => MYDLL ... )
先加載DLL1,然後加載DLL2;在DLL2中添加一個函數'setupCore(void(* funtion_ptr)())'(或類似的東西),並將所需函數的地址從DLL1傳遞給該函數。 – Gasim
好主意!真的! – jakubinf