如何对 COM 中的方法进行返回类型?
Posted
技术标签:
【中文标题】如何对 COM 中的方法进行返回类型?【英文标题】:How to do return types on methods in COM? 【发布时间】:2014-01-11 01:12:44 【问题描述】:我知道 COM 现在已经过时了,但我们时不时地需要对其进行一些工作。我在 Visual Studio 中处理 ATL COM 应用程序,我尝试向接口添加一个方法,但它不允许我将返回类型从 HRESULT 更改为其他类型,如 long 或 BSTR。
我不记得它是如何完成的,可能是通过一些输出参数。谁能告诉我我们如何在 COM 接口方法中返回类型?
【问题讨论】:
【参考方案1】:COM中的返回类型总是HRESULT(除了特殊方法AddRef和Release),所以需要使用out
参数:
HRESULT GetString([out] BSTR* val);
您还可以添加retval
属性以将输出参数转换为脚本语言(使用IDispatch)的返回值:
HRESULT GetString([out, retval] BSTR* val);
【讨论】:
通过IDispatch接口在编译语言中使用时是否会被视为返回值?我希望在目标语言中像“string s = GetString()”一样使用它 好的,我找到了。它是 [out, retval] COM 中的返回类型并不总是 HRESULT。我可以是简单的类型(INT、BOOL)或基本上任何东西,只要可以正确编组它(例如:msdn.microsoft.com/en-us/library/aa370234.aspx)。不过还是推荐的。 非 HRESULT 方法始终是本地的,不能被封送。所以从技术上讲你是对的,但它不是一个真正的 COM。来自 MSDN 的引用:[“非 [本地] 对象接口成员函数的返回值必须为 HRESULT 或 SCODE。”](msdn.microsoft.com/en-us/library/windows/desktop/…)以上是关于如何对 COM 中的方法进行返回类型?的主要内容,如果未能解决你的问题,请参考以下文章
Java中的通用方法-如何将参数类类型作为返回类型返回[重复]