我正在使用以下代码在win32可执行文件上加载DLL:
int _tmain(int argc, _TCHAR* argv[])
{
DWORD somevar = 0;
HINSTANCE hDLL;
hDLL = LoadLibrary( argv[1] );
if ( !hDLL ){
MessageBox(NULL, _T("Unable to load dll."), _T("Fatal Error"), MB_ICONERROR);
return -1;
}
}
加载DLL后,DLL是否可以访问其父可执行文件的变量,比如上面的DWORD变量somevar
?
场景是加载DLL的实际可执行文件已经编译并在生产中使用,因此我无法在父可执行文件中添加任何代码。我只有源代码供参考。
答案 0 :(得分:0)
你需要从你的DLL中export访问器函数,这可能看起来像这样:
__declspec(dllexport) DWORD getSomevar();
__declspec(dllexport) void setSomevar(DWORD somevar);
(此时最好让somevar
不是堆栈变量。)
然后加载的DLL可以使用GetProcAddress来获取这些函数的地址并调用它们。链接中有示例代码。
答案 1 :(得分:0)
为了访问somevar变量,你应该传递var的地址。我的意思是将var作为指针传递给dll。
__declspec(dllexport) void DLLFunc1(DWORD* somevar);
---在你的代码中
DWORD somevar = 0;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, "DLLFunc1")
}
lpfnDllFunc1(&somevar);