0

我正在使用以下代码在 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 是否可以访问其父可执行文件的变量,比如somevar上面的 DWORD 变量?

场景是加载DLL的实际可执行文件已经编译并在生产中使用,所以我不能在父可执行文件中添加任何代码。我只有源代码供参考。

4

2 回答 2

0

您需要从您的 DLL 中导出访问器函数,这可能看起来像这样:

__declspec(dllexport) DWORD getSomevar();
__declspec(dllexport) void setSomevar(DWORD somevar);

(此时最好somevar不要成为堆栈变量。)

加载的 DLL 然后可以使用GetProcAddress获取这些函数的地址并调用它们。链接中有示例代码。

于 2012-06-20T16:21:52.617 回答
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);
于 2012-06-20T16:27:47.870 回答