如何将LPWSTR解释为Win32调用中的out参数?

时间:2014-11-08 00:00:14

标签: c++ winapi

我试图使用以下签名调用Win32函数:

HRESULT GetDefaultStartupFlags(
     [out]  DWORD *pdwStartupFlags,
     [out, size_is(*pcchHostConfigFile)] LPWSTR pwzHostConfigFile,
     [in, out]  DWORD *pcchHostConfigFile);

(功能参考here

我很困惑如何解释" LPWSTR"这也是一个[out]参数。这是否意味着我希望传递一个指向预先分配的空间的LPWSTR将被覆盖?如果这是真的,我该如何解释" size_is(...)"知道缓冲区应该有多大的指令,以及如何分配空WSTR?

2 个答案:

答案 0 :(得分:2)

您可以将wchar_t数组用于LPWSTR
(见http://msdn.microsoft.com/en-us/library/cc230355.aspx
像往常一样分配(固定大小,或C ++中的C / new中的malloc)
结果是文件路径,因此它将存储为UTF16(与Windows中一样)。

函数的最后一个参数是传递分配的长度 如文档中所述,您可以传递0以获得预期的大小
(分配足够的,然后再次调用该函数)

答案 1 :(得分:2)

为第二个参数传递NULL会导致在第3个参数中返回所需的大小。

DWORD flgs, sz;
HRESULT hr = GetDefaultStartupFlags(&flgs, NULL, &sz);
if (hr != S_OK) { }
WSTR config[sz]; // or malloc or new ...
hr = GetDefaultStartupFlags(&flgs, config, &sz);
if (hr != S_OK) { }