我有一个 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 类型的对象?