SAFEARRAY используется в C++ для передачи массивов в COM-вызовах (причем массивов, состоящих из любых элементов и любой размерности). Ниже показан пример как извлечь из такого "массива" (в данном случае - одномерного) элементы в массив типа byte:
SAFEARRAY *retSafeArray = NULL;
// здесь где-то вызывается COM-метод, возвращающий результат в retSafeArray
long resultByteArraySize = (retSafeArray->rgsabound)[0].cElements; // получаем число элементов, т.е. размер единственного измерения нашего одномерного массива
byte* resultByteArray = new byte[scanResultArraySize];
HRESULT safeArrayExtractionRes;
byte arrElem;
for(long i=0;i<resultByteArraySize;i++)
{
safeArrayExtractionRes = SafeArrayGetElement(retSafeArray, &i, &arrElem);
resultByteArray[i] = arrElem;
if(safeArrayExtractionRes != S_OK)
{
SafeArrayDestroy(retSafeArray);
retSafeArray = NULL; throw new exception("Error extracting data from SAFEARRAY %u\n",safeArrayExtractionRes);
}
}
SafeArrayDestroy(retSafeArray); // удалить больше ненужный SAFEARRAY
retSafeArray = NULL;
Комментариев нет:
Отправить комментарий