【问题标题】:Convert LPVOID to CComVariant将 LPVOID 转换为 CComVariant
【发布时间】:2012-04-03 07:59:45
【问题描述】:

我有以下 Win32 ATL 代码:

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

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

【问题讨论】:

  • 您要创建什么类型的变体?
  • 字符串。但是 result = (BSTR)lpBuffer 没有给我文件中的有效字符串,而是一些乱码
  • 使用以 LPCSTR 作为参数的构造函数创建 CComBSTR 的实例。然后在 CComVariant 的构造函数中使用这个实例,它将对 CComBSTR 的引用作为参数。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 2014-12-07
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多