代码之家  ›  专栏  ›  技术社区  ›  andlabs

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

  •  1
  • andlabs  · 技术社区  · 9 年前

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

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

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

    谢谢

    1 回复  |  直到 9 年前
        1
  •  1
  •   Hans Passant    9 年前

    你说的是 线程模型 您要为COM组件指定。不,你不能把它放在IDL中,它太重要了。客户端不必使用IDL,例如Javascript这样的脚本语言永远不会使用。它必须位于组件的CLSID键的注册表中。您希望ThreadModel=“Apartment”请求客户端提供STA线程。如果缺少此项,则默认情况下COM假定为。

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

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