将LPVOID转换为CComVariant

时间:2012-03-18 16:20:57

标签: c++ winapi visual-c++ atl

我有以下Win32 ATL代码:

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

现在我需要将lpBuffer的值放到结果变量中。我该怎么办?

1 个答案:

答案 0 :(得分:2)

void *指针不是变体的允许数据类型。最接近的自然匹配是一个字节数组。您可以使用CComSafeArray类包装器为元素类型VT_U1创建一个,CComVariant(SAFEARRAY *)构造函数来创建变体。您可能希望直接调用SafeArrayCreateDiscriptor和SafeArrayAllocData,以避免必须复制缓冲区。只需直接读入已分配的数据缓冲区即可。