gpt4 book ai didi

windows - 如何使 COM 对象的方法不在主线程中运行

转载 作者:可可西里 更新时间:2023-11-01 14:28:27 34 4
gpt4 key购买 nike

我有一个实现 COM 本地服务器的 Windows 服务。

当作为应用程序运行时,COM 对象方法在一个单独的(而不是在主线程中)调用,这很好。作为服务运行时情况会发生变化 - 然后在服务线程的上下文中调用 COM 对象方法,这对我来说并不酷。

我看到它与公寓、MTA、STA 等有关。但我不知道如何强制 COM 在单独的线程中而不是在服务线程中调用我的对象方法。

这可能与在服务启动时注册 com 对象有关?

我的环境是 windows 7 + delphi,但欢迎使用 c++ 解决方案。

2011-04-26 更新:
@sharptooth 和@Chris Dickson 的荣誉让我在“消息循环”的方向上搜索解决方案。

由于它是 STA,因此该应用依赖消息泵将 COM 消息传送到注册 coclass 的线程。我将 coclasses 的注册重新定位到具有消息循环的单独线程中,并且所有 com 调用现在都在该线程中执行。我以前尝试过这种方法,但忘记了消息循环,所以这是拼图的缺失部分。谢谢大家!

最佳答案

对象将在您注册它们的任何线程上调用。如果您希望在单独的单元 (STA) 中调用这些对象,您必须从该单元注册类对象。这可以通过创建一个单独的线程并从那里注册来完成。

关于windows - 如何使 COM 对象的方法不在主线程中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235379/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com