两个简单的COM IDL语法问题:有没有办法指定线程模型,我是否需要void来说“无参数”?

时间:2015-03-06 23:51:29

标签: com idl midl

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

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

  2. 我的方法声明(如C中)的括号中是否需要void来指定无参数? MSDN与此不一致;头文件也是如此。我自己的这个界面的个人实现将在C。

  3. 感谢。

1 个答案:

答案 0 :(得分:1)

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

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

IDL中没有HRESULT Method(void)是不必要的,使用HRESULT Method()就足够了。 Midl.exe并不关心您使用的语言。