Как бы я интерпретировал LPWSTR как выходной параметр в вызове Win32?

0

Я пытаюсь вызвать функцию Win32 со следующей сигнатурой:

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

(здесь используется функция)

Я очень смущен, как интерпретировать "LPWSTR", который также является параметром [out]. Означает ли это, что я должен передать LPWSTR, который указывает на предварительно выделенное пространство, которое будет перезаписано? Если это так, как мне интерпретировать директиву "size_is (...)", чтобы узнать, насколько велик буфер, и как вы распределяете пустой WSTR?

Теги:
winapi

2 ответа

2
Лучший ответ

Вы можете использовать массив wchar_t для LPWSTR
(см. http://msdn.microsoft.com/en-us/library/cc230355.aspx)
Распределение как обычно (фиксированный размер или malloc в C/new в C++)
Результатом является путь к файлу, поэтому он будет сохранен как UTF16 (как обычно в Windows).

Последний параметр вашей функции предназначен для передачи выделенной длины.
Как указано в документах, вы можете передать 0, чтобы получить ожидаемый размер
(чтобы выделить достаточно, а затем снова вызвать функцию)

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) { }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню