跨dll边界的窗口消息

时间:2014-05-24 15:40:08

标签: c++ multithreading dll mfc

我有一个使用DLL进行实时通信的GUI。为了使DLL能够将未经请求的信息传递给GUI,在初始化时将指向通知对象的指针传递给DLL。这很好,除了现在我需要这个通知对象来触发主线程中的GUI更新(通知指针可以从DLL生成的几个线程中使用)。我正在通过让通知对象通过SendNotifyMessage()向GUI线程发出信号来尝试此操作。一切似乎都很好,除了消息似乎永远不会到达GUI线程......

抱歉没有可用的实际代码(我目前不在同一台PC上),但为了说明:

//Main GUI thread:
pNotifier->hWnd = this->GetSafeHwnd();
InitDll(pNotifier);

//DLL (in a locally spawned thread):
pNotifier->TriggerGUIEvent(x);

//Back in GUI code (but now in a different thread):
void notifier::TriggerGUIEvent(int x)
{
  //This returns non-zero (success).
  ::SendNotifyMessage(hWnd, WM_MY_MESSAGE, x, NULL);
}

//Back in the main GUI thread:
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
  //Break point here never gets hit???
}

顺便说一句,这是C ++ / MFC。 DLL本身只是C ++。

我已经完成了一些Windows编程工作,但这并不是我的强项。有谁知道我在这里缺少什么?对SendNotifyMessage()的调用是否源自在DLL边界的另一侧创建的另一个线程,以某种方式使消息或窗口句柄无效?

感谢。

0 个答案:

没有答案