从子DLL访问/修改变量

时间:2012-06-20 16:17:54

标签: c++ winapi

我正在使用以下代码在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的实际可执行文件已经编译并在生产中使用,因此我无法在父可执行文件中添加任何代码。我只有源代码供参考。

2 个答案:

答案 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);