我写了一个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);
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);
解决方案 »
- 如何通过图片文件的路径在mfc对话框中动态显示图片?
- GDI+ 如何将位图资源和exe编译到一起
- VC++6.0所建工程出问题
- vc多文档视图中运行时启动document中线程的问题
- 相当的急!在类中用new或mallo实现动态分配数组大小,编译和组建都没有错误,但执行就有“Debug Error!”,为什么?
- Dialog based工程如何获得APP和dlg的指针?
- 在dll中使用双指针作为函数参数,结果函数没有改变指针的值?
- sdk中包含了process.h但 _beginthread()无法用,提示未定义。请问何故
- MFC 扩展dll 键盘钩子 移植后0xc0150002 初始化失败怎么解决
- 请问,如何在程序中调出控制面板里的ODBC数据源配置程序?
- Module32First函数的使用
- 截屏时随着鼠标的移动,获取鼠标的位置的RGB值,我怎么实现不了???
http://topic.csdn.net/t/20060324/12/4637217.html
http://topic.csdn.net/t/20060324/12/4637217.html 这个回答好像没用哦。
一般你没有写消息线程的话,程序中只接收窗口消息.而不能能自动处理线程消息.