Конвертировать LPVOID в CComVariant - PullRequest
1 голос
/ 18 марта 2012

У меня следующий код Win32 ATL:

CComVariant result;
DWORD dwFileSize = GetFileSize(hFile, NULL);
LPVOID lpBuffer = HeapAlloc(hHeap, NULL, dwFileSize + 1);
ReadFile(hFile, lpBuffer, dwFileSize, &bytesReaded, NULL)

Теперь мне нужно поместить значение lpBuffer в результирующую переменную. Как я могу это сделать?

1 Ответ

2 голосов
/ 18 марта 2012

Указатель void * не является допустимым типом данных для вариантов. Наиболее близким естественным соответствием является массив байтов. Вы можете использовать оболочку класса CComSafeArray, чтобы создать ее для типа элемента VT_U1, конструктор CComVariant (SAFEARRAY *) для создания варианта. Возможно, вы захотите вызвать SafeArrayCreateDiscriptor и SafeArrayAllocData напрямую, чтобы избежать необходимости копировать буфер. Просто прочитайте непосредственно в выделенный буфер данных.

...