1

即使搜索 MSDN 和一般互联网,我似乎也找不到两个简单的 COM IDL 文件问题的答案:

  1. 是否有一个接口属性可以让我指定我的接口仅由 STA 对象实现,或者这只是我的文档的详细信息?我已经有了[object, local]我认为对于非远程(进程中)COM 对象是正确的。

  2. 我是否需要void在方法声明的括号中(如在 C 中)不指定参数?MSDN 对此不一致;头文件也是如此。我自己对此接口的个人实现将使用 C 语言。

谢谢。

4

1 回答 1

1

您正在谈论要为 COM 组件指定的线程模型。不,你不能把它放在 IDL 中,它太重要了。客户端不必使用您的 IDL,例如 Javascript 之类的脚本语言永远不会。它必须在注册表中,在您的组件的 CLSID 键中。您希望 ThreadingModel = "Apartment" 请求客户端提供 STA 线程。如果它缺失,那么 COM 会默认为它。

请记住,这并不强制客户端程序员提供一个。如果他出于某种原因偏爱 MTA,那么 COM 将提供 STA 线程以将您的组件作为安全的家。如果您的代理太慢而无法使用,那么您确实有文档要求。

IDL 中的noHRESULT Method(void)不是必需的,使用HRESULT Method()就足够了。Midl.exe 不关心您使用什么语言。

于 2015-03-07T01:51:19.930 回答