在2个不同的进程中使用DLL中的共享内存段

时间:2013-11-28 08:31:16

标签: winapi visual-c++ dll shared-libraries

我有一个共享DLL,我想将HWND写入全局共享部分:

#pragma data_seg(".SHARED")
HWND g_shhWnd = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:.SHARED,RWS")

进程1加载DLL(LoadLibrary)并从DLL调用MainLoop,等待WM_QUERYWND。收到后,它会将自己的HWND写入全局共享变量g_shhWnd。

extern "C" __declspec(dllexport) MainLoop()
{
  // contains huge bunch of stuff: creates a window, message loop & window handler
  // window handler contains:
  case WM_QUERYWND:
    g_shhWnd = myCurrentWnd;
  // ...
}

进程2加载DLL LoadLibrary)并调用GetMyWnd():

extern "C" __declspec(dllexport) HWND GetMyWnd()
{
  UINT WM_QUERYWND = RegisterWindowMessage(WM_QUERWND_GUID);
  SendMessage(HWND_BROADCAST, WM_QUERWND, 0, 0);
  return g_shhWnd;
}

此函数使用WM_QUERWND,使进程1将当前HWND写入g_shhWnd。实际上进行了此调用,并且g_shhWnd实际上由进程1写入(通过MessageBox检查)。

但是,进程2中GetMyWnd的返回值始终为零(当然,在SendMessage返回后,g_shhWnd为零)。

我希望g_shhWnd在此DLL中存在的所有实例中共享。

是否有任何遗漏或如何进行调试?

0 个答案:

没有答案