各位前輩請教一下
我寫了一個有傳入參數沒有回傳值的DLL
並且在我的Driver裡面傳一個指標(p_test)到該DLL
該DLL執行結束後回到Driver卻發現之前傳進去的指標(p_test)位址跑掉了
即使我的那個DLL什麼事都沒做,我把程式刪減一下.請大家幫我看一下哪裡有問題
///////////////////////////////////////////////////////////////////
#include
#define MALLOC(bytes) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (bytes)) #define FREE(address) if ((address) != NULL) { HeapFree(GetProcessHeap(), 0, (address)); address = NULL; } HMODULE hLibModule = NULL;
void TIS_Trace(LPCTSTR format, ...);
typedef struct{
short v1;
short v2;
}MyStruct, *LPMyStruct;
BOOL WINAPI DllMain (HMODULE hmod, DWORD dwReason, LPVOID lpRes)
{
BOOL rc = TRUE;
switch (dwReason) {
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_PROCESS_DETACH:
case DLL_THREAD_DETACH:
break;
default:
rc = FALSE;
break;
}
return rc;
} extern "C" __declspec(dllexport) void TmpFun2(LPMyStruct p_test)
{
p_test->v1 = 111;
p_test->v2 = 222;
}
/////////////////下面是我的Driver裡面呼叫的方式/////////////////
typedef struct{
short v1;
short v2;
}MyStruct, *LPMyStruct; typedef VOID (*MYTYPE2)(LPMyStruct);
LPMyStruct p_test;
HMODULE hLibModule;
MYTYPE2 FnTmpFun2; hLibModule = LoadLibrary(TEXT("c:\\CoverPage.DLL"));
FnTmpFun2 = (MYTYPE2)GetProcAddress(hLibModule, "TmpFun2");
(FnTmpFun2)(p_test);
FREE(p_test);
FreeLibrary(hLibModule);