你如何从CComSafeArray获得底层的SAFEARRAY?

时间:2013-09-03 07:15:37

标签: c++ safearray

我尝试了GetSafeArrayPtr()方法,该方法返回一个类型定义为:

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

我以为我可以直接将它分配给SAFEARRAY *变量,但编译器会给出这个错误:

  

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

我发现这很奇怪。我在这里做错了什么?

PS:我在C ++ / CLI dll中执行此操作(如果这有任何相关性)。

1 个答案:

答案 0 :(得分:1)

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

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

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

DummyFunction(*pArray);