我有一个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类型的对象?
答案 0 :(得分:3)
要在ATL端获取VT_EMPTY,只需在托管代码中传递null(VB中为Nothing,C ++ / CLI中为nullptr)。
参考: