【发布时间】:2012-04-03 21:49:00
【问题描述】:
我有一个应用程序,它创建了一个线程,该线程通过 Windows 消息与主 UI 进行通信。它只是将消息发送到主应用线程并接收状态。
这样我可以显示模态窗口并做其他事情。
问题是当我必须显示一个调用 com+ 服务器的表单时。 这样我会收到 OLE 错误 8001010D:无法进行传出调用,因为应用程序正在调度输入同步调用。
我认为这是因为主 SendMessage 正在使用中,而 com+ 调用需要 Windows 消息传递来完成其任务。
无论如何,在 delphi 中,我无法从线程中显示表单,但是我该如何解决这个问题...?
谢谢
编辑:
- MAIN(UI) 2. 线程
A.线程(2)向主线程(1)发送消息 B. 主线程(1) 接收到消息,然后让它回到线程 它显示窗口。 C. 主线程模态窗口要com+调用,出现上述错误。
-
模态窗口在哪个线程中? 2. COM 调用来自哪个线程? 3. COM 对象是在哪个线程中实例化的? 4.后台线程是否用STA初始化? 5. 模式表单是否从 SendMessage 处理程序中显示? – Roman R. 2 分钟前
- 主要
- 主要
- 主要
- CoInitializeEx(nil, COINIT_MULTITHREADED);
- 是的。
【问题讨论】:
-
1.模态窗口在哪个线程中?2.COM 调用来自哪个线程?3.COM 对象是在哪个线程中实例化的?4.后台线程是用STA初始化的吗?5.是否从SendMessage处理程序显示模态表单? -
我添加了有关该主题的更多信息。
-
我喜欢@RomanR。解决方案(+1)。但是您是否尝试使用
Synchronize在主VCL 线程中调用com+? -
@kobik 不,我没有,因为我没有使用 TThread 的 delphi 类。如果我用过,我可能会试一试。要更改很多代码以检查它...
标签: delphi winapi com delphi-7