两个简单的COM IDL语法问题:有没有办法指定线程模型,我需要void说"no arguments"?

Two simple COM IDL syntax questions: is there a way to specify the threading model, and do I need void to say "no arguments"?

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

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

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

谢谢。

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

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

No HRESULT Method(void) 在 IDL 中不是必需的,使用 HRESULT Method() 就足够了。 Midl.exe 不在乎你使用什么语言。