Параметр размера из функции

Я вижу, что многие функции нуждаются в вас, чтобы установить размер для строки, которая является выходной.

GetComputerNameW требует:

WCHAR wStrName[16U];
DWORD uSize = 16U;
GetComputerNameW(wStrName, &uSize);

RegSetValueExW необходимо:

WCHAR wStrExec[1024U];
RegSetValueExW(..., (wcslen(wStrExec) + 1U) * sizeof(WCHAR));

GetWindowTextW требует:

WCHAR wStrText[1024U];
GetWindowsTextW(..., sizeof(wStrText));

GetModuleBaseNameW требует:

WCHAR wStrName[1024U];
GetModuleBaseNameW(..., sizeof(wStrName) / sizeof(WCHAR));

У меня вопрос, как сделать разницу между размерами? Строки всегда определяются как WCHAR, а установленные размеры сильно отличаются.

1 ответ

Если вы внимательно прочитаете документацию, вы увидите, что параметр size - это размер выходного буфера в байтах:

cbData [in]

Размер информации, на которую указывает параметр lpData, в байтах. Если данные имеют тип REG_SZ, REG_EXPAND_SZ или REG_MULTI_SZ, cbData должен включать размер завершающего нулевого символа или символов.

Что, конечно, дает то, что вам нужно:

WCHAR wStrExec[1024U];
RegSetValueExW(..., sizeof (wStrExec));
Другие вопросы по тегам