如何从CComSafeArray中获取底层SAFEARRAY

How do you get the underlying SAFEARRAY from a CComSafeArray?

本文关键字:SAFEARRAY 获取 CComSafeArray      更新时间:2023-10-16

我尝试了GetSafeArrayPtr()方法,该方法返回一个typedef定义为:的LPSAFEARRAY*

typedef /* [wire_marshal] */ SAFEARRAY *LPSAFEARRAY;

我以为我可以直接将其分配给SAFEARRAY*变量,但编译器给出了以下错误:

错误C2440:"=":无法从"LPSAFEARRAY*"转换为"SAFEARRAY"*'

我觉得这很奇怪。我在这里做错了什么?

PS:我是在一个C++/CLI dll中做这件事的(如果这有任何相关性的话)。

LPSAFEARRAY *是指向SAFEARRAY *的指针,因此需要一个双指针,如下所示:

{
    CComSafeArray<VARIANT> vArray;
    SAFEARRAY** pArray;
    pArray = vArray.GetSafeArrayPtr();
}

然后,您可以通过取消引用从CComSafeArray:返回的指针,将SAFEARRAY *传递给需要它作为参数的函数

DummyFunction(*pArray);