Я попробовал GetSafeArrayPtr()
метод, который возвращает LPSAFEARRAY *, который typedef определен как:
typedef /* [wire_marshal] */ SAFEARRAY *LPSAFEARRAY;
Я думал, что смогу напрямую присвоить это переменной SAFEARRAY *, но компилятор выдает эту ошибку:
ошибка C2440: ‘=’: невозможно преобразовать из ‘LPSAFEARRAY *’ в ‘SAFEARRAY
*»
Я нашел это странным. Что я здесь не так делаю?
PS: я делаю это внутри DLL C ++ / CLI (если это имеет какое-либо значение).
LPSAFEARRAY *
это указатель на SAFEARRAY *
так что вам нужен двойной указатель, например:
{
CComSafeArray<VARIANT> vArray;
SAFEARRAY** pArray;
pArray = vArray.GetSafeArrayPtr();
}
И тогда вы можете передать SAFEARRAY *
к функции, которая нуждается в этом в качестве аргумента, разыменовывая указатель, возвращаемый из CComSafeArray
:
DummyFunction(*pArray);
Других решений пока нет …