正常に動作しているエラーチェックを2番目のスレッドに実行させる必要があります。メイン スレッドは、ウィンドウのない ActiveX OCX です。
私がやりたいのは、その2番目のスレッドにメッセージをメインスレッドに投稿させることです。メッセージ マップとメッセージ ハンドラをセットアップしました。2 番目のスレッド内から、PostMessage を使用してメッセージを表示します。PostMessage 呼び出しの戻り値が 1 (TRUE) になる限り、そこに到達し、メッセージが投稿されることはわかっています。メッセージ ハンドラーからの応答がありません。まったく呼び出されていないようです。
Visual Studio 2012 ActiveX プロジェクトのコード スニペット:
//Message handler definition from the .h file:
protected:
afx_msg LRESULT OnHSAmessage(WPARAM wParam, LPARAM lParam);
//From the .cpp file:
BEGIN_MESSAGE_MAP(CHSAObserver_ActiveXControlCtrl, COleControl)
ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
ON_MESSAGE(WM_HSAMESSAGE, &CHSAObserver_ActiveXControlCtrl::OnHSAmessage)
END_MESSAGE_MAP()
// thread creation (this works)
HSAWnd *pWnd = new HSAWnd(this);
hwndTarget = pWnd->Create();
HANDLE threadHandle = CreateThread(NULL,NULL, (LPTHREAD_START_ROUTINE)ThreadProc, (LPVOID) hwndTarget, NULL, &dwID);
//thread implementation
LONG ThreadProc(LPVOID pParam)
{
BOOL status;
//I know I get here the Postmessage call does not result
//in the message handler being invoked
MessageBox(_T("inside threadproc"));
CHSAObserver_ActiveXControlCtrl *pCtrl = (CHSAObserver_ActiveXControlCtrl*)pParam;
//post message using global HSAWnd
status = PostMessage(hwndTarget, WM_HSAMESSAGE,(WPARAM)NULL,(LPARAM)NULL);
//post message using Class window (here for testing only)
//status = PostMessage (pCtrl->m_hWnd, WM_HSAMESSAGE,(WPARAM)NULL,(LPARAM)NULL);
return TRUE;
}
afx_msg LRESULT CHSAObserver_ActiveXControlCtrl::OnHSAmessage(WPARAM wParam, LPARAM lParam)
{
//this never happens
MessageBox(_T("message posted"));
return 0;
}