我写了一个mfc dll和一个sdi的exe,从dll中PostThreadMessage发消息给exe,消息发送成功,但exe接受不到消息。不知道问题出在哪里,请高手多多指教。部分代码如下所示:
dll头文件中定义如下:
#define WMU_MSG (WM_USER + 101) 
void SendMessageFromDll(DWORD a);
extern "C" _declspec(dllexport) void StartSendMessage(DWORD a);
dll cpp中定义如下:
void StartSendMessage(DWORD a){
      theApp.SendMessageFromDll(a);
}
void CtestaApp::SendMessageFromDll(DWORD a){
      ::PostThreadMessage(a,WMU_MSG,0,10);
}exe 头文件中定义如下:
#define  WMU_MSG (WM_USER + 101)
afx_msg void  OnMyMessage(WPARAM wParam, LPARAM lParam);
BOOL PreTranslateMessage(MSG* pMsg);exe cpp中定义如下:
BEGIN_MESSAGE_MAP(CtestbApp, CWinApp)
   ......
   ON_THREAD_MESSAGE(WMU_MSG, OnMyMessage)
   .......
END_MESSAGE_MAP()void  CtestbApp::OnMyMessage(WPARAM wParam, LPARAM lParam){
int a = (int)lParam;
CString b;
b.Format(_T("%d"), a);
AfxMessageBox(b);
}
BOOL CtestbApp::PreTranslateMessage(MSG* pMsg){
if (pMsg->message == WMU_MSG) {
OnMyMessage(pMsg->wParam, pMsg->lParam);
return TRUE;
}else{
return CWinThread::PreTranslateMessage(pMsg);
}
}BOOL CtestbApp::InitInstance()的最后return true前typedef void (*STARTSENDMESSAGE)(DWORD a);
HMODULE hmessage = NULL;
STARTSENDMESSAGE Message = NULL;
hmessage = LoadLibrary(_T("testa.dll"));if(hmessage==NULL) {
  FreeLibrary(hmessage);
  return false;
}
Message = (STARTSENDMESSAGE)GetProcAddress(hmessage,"StartSendMessage");
if(Message==NULL){
  FreeLibrary(hmessage);
  return false;
}
DWORD a = AfxGetApp()->m_nThreadID;//AfxGetThread()->m_nThreadID;
Message(a);

解决方案 »

  1.   

    参考下这篇文章
    http://topic.csdn.net/t/20060324/12/4637217.html
      

  2.   

    在Message(a);后用::PostThreadMessage(a,WM_MSG, 0, 10);直接发的话,接受成功。但是dll中发的话exe没反应。
    http://topic.csdn.net/t/20060324/12/4637217.html 这个回答好像没用哦。
      

  3.   

    因为你的sdi.exe没有处理线程消息的线程吧.有的话,有可能是传错线程了.
    一般你没有写消息线程的话,程序中只接收窗口消息.而不能能自动处理线程消息.
      

  4.   

    为什么用PostThreadMessage呢?sdi.exe和dll不是一个线程?