为什么C#Object传递给COM方法的VARIANT *参数转换为VT_DISPATCH类型

时间:2013-07-31 00:24:06

标签: com marshalling variant

我有一个ATL COM服务,该服务公开了一个方法,该方法将[in,out] VARIANT指针作为参数接收。

例如,我有一个COM接口的方法,比如IMyApiCom:

HRESULT Action([in, out] VARIANT* EmptyObj);

我编写了一个调用它的C#客户端应用程序,如下所示:

MyApiCom myapi = new MyApiCom();
Object emptyObj = new Object();
myapi.Action(ref emptyObj);

现在,当我调试COM服务并检查EmptyObj的初始化方式时,它的类型为VT_DISPATCH,而我预计它是VT_EMPTY。这对我来说是一个问题,虽然它很容易解决(通过将其设置为VT_EMPTY)。

为什么我更喜欢将它放在VT_EMPTY之外,我只想知道为什么它被初始化为VT_DISPATCH而不是VT_EMPTY。

此外,是否可以传递VT_EMPTY类型的对象?

1 个答案:

答案 0 :(得分:3)

要在ATL端获取VT_EMPTY,只需在托管代码中传递null(VB中为Nothing,C ++ / CLI中为nullptr)。

参考: