關於程序出現 “因為應用程序正在發送一個輸入同步呼叫,所以無法執行傳出的呼叫”


最近在開發中碰到一個問題,

調用

 

_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)

     {

        //邏輯過程

     }

 

 

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM