关于程序出现 “因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫”
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)
{
//逻辑过程
}
}
调用
_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)
{
//逻辑过程
}
}
相关文章推荐
- 8 Free Tools to Find What Files and Folders are Taking Up Hard Drive Space
- 第三周2本月有几天?
- fibnacci
- 字符和字符串操作
- 懒人记事本
- GCD
- python里使用cv2.goodFeaturesToTrack()函数追踪图像里的关键点
- 第五周项目1.4
- Centos 下 Hadoop2.6.4安装 多节点部署
- Delphi与JAVA互加解密AES算法
- Lua FFI 实战
- C/C++ 字符串replace替换函数
- 第5周项目1-(5)
- 画五角星
- Extjs 的MVVM结构学习笔记
- 第五周项目1.3
- Android ContentProvider 学习总结
- useradd和adduser的区别
- SSL证书常见错误和解决办法
- UTF-8编码