Использование CComSafeArray - PullRequest
       21

Использование CComSafeArray

1 голос
/ 31 января 2012

У меня есть функция Com:

GetData (SAFEARRAY ** pRetVal)

У меня есть следующий фрагмент кода:

SAFEARRAY *ppData = NULL;       
hr = pmyInterface->GetData( &ppData );
CComSafeArray<IUnknown*> pSafeArgs;
pSafeArgs.Attach( ppData );

Я должен изменить его и удалить ppData, а также удалить команду Attach.

Это должно быть примерно так:

CComSafeArray<IUnknown*> pSafeArgs;
hr = pmyInterface->GetData( ((SAFEARRAY**)&pSafeArgs )))

Но это не работает. Вероятно, проблема с выпуском CComArray.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 31 января 2012

Попробуйте использовать CComSafeArray :: GetSafeArrayPtr () :

// Substitute T with the actual type of items 
// in your SAFEARRAY, e.g. CComSafeArray<BYTE>
CComSafeArray<T> safeArgs;

hr = pmyInterface->GetData( safeArgs.GetSafeArrayPtr() );

(В общем, вам следует избегать приведений в стиле C в коде C ++.)

0 голосов
/ 31 января 2012

Обычно при создании CComSafeArray вы указываете тип данных, которые будут в нем храниться, например:

CComSafeArray<char> pSafeArgs;

Чтобы добавить это к вашей функции COM, вы должны сделать следующее:

HRESULT hr = pmyInterface->GetData((LPSAFEARRAY)pSafeArgs);
...