0

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

4

1 回答 1

3

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

参考:

于 2013-07-31T00:41:31.350 回答