2012-03-18 20 views
1

我有以下的Win32 ATL代碼:轉換LPVOID到CComVariant

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

現在我需要把lpBuffer的價值,結果變量。我該怎麼做?

+0

你想創建什麼類型的變體? – 2012-03-18 16:30:01

+0

字符串。但結果=(BSTR)lpBuffer沒有給我有效的字符串從文件,但一些亂碼文本 – Boffin 2012-03-18 17:07:20

+0

創建CComBSTR的實例與構造函數,該構造函數將LPCSTR作爲參數。然後在CComVariant的構造函數中使用此實例,該實例將CComBSTR的引用作爲參數。 – 2012-03-18 17:15:54

回答

2

對於變體,void *指針不是允許的數據類型。最接近的自然匹配是一個字節數組。您可以使用CComSafeArray類包裝爲元素類型VT_U1創建一個CComVariant(SAFEARRAY *)構造函數來創建變體。您可能需要直接調用SafeArrayCreateDiscriptor和SafeArrayAllocData,以避免必須複製緩衝區。直接讀入分配的數據緩衝區。