使用OLE出现“因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫”错误导致CreateDispatch失败


最近碰到一个Bug,在使用OLE导出excel的时候CreateDispatch总是失败。
调试进去发现在调用CreateDispatch的时候会提示“0x8001010D:因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫”

使用OLE出现“因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫”错误导致CreateDispatch失败_第1张图片
Paste_Image.png

在微软的官网上找了相关的错误信息

使用OLE出现“因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫”错误导致CreateDispatch失败_第2张图片
Paste_Image.png
使用OLE出现“因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫”错误导致CreateDispatch失败_第3张图片
Paste_Image.png

可以看到这是由于OLE的防死锁机制导致的,根据调用堆栈往回找找果然发现代码中有调用SendMessage。
把SendMessage换成PostMessage之后问题就不再出现了。

你可能感兴趣的:(使用OLE出现“因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫”错误导致CreateDispatch失败)