最近在開發中碰到一個問題,
調用
_di_XMLDocument doc = NewXMLDocument();
這段代碼的時,程序報異常“因為應用程序正在發送一個輸入同步呼叫,所以無法執行傳出的呼叫”
查了CSDN 和 StackOverflow 他們碰到的問題,大多是由於SendMessage 和 COM 2個組件。(原理目前不清楚)
受此啟發,發現,我的doc對象,是在一個 鍵盤鈎子的回調函數中執行的。
目測,這個鍵盤鈎子的回調函數,在等待一個SendMessage的返回。
解決辦法是。當捕獲到鍵盤鈎子之后,PostMessage 一個自定義消息給一個窗體(我是Post給主窗體了)。讓鍵盤鈎子趕緊返回。
然后主窗體收到消息之后,執行鍵盤鈎子的邏輯部分。
之前是這樣寫的:
//鍵盤鈎子回調
void CALLBACK HOOK(wParam,lparam)
{
//邏輯過程
}
修改為
void CALLBACK HOOK(wParam,lparam)
{
//邏輯過程
PostMessage(Handle, WM_USER+100, 參數1,參數2);
}
然后主窗體收到消息時處理
void OnMessage(TMessage& msg)
{
if (msg.msg == WM_USER+100)
{
//邏輯過程
}
}