您的位置:首页 > 其它

关于程序出现 “因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫”

2016-03-31 09:10 627 查看
最近在开发中碰到一个问题,

调用

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

{

//逻辑过程

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: