-1

我看到很多函数需要你为输出的字符串设置一个大小。

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 并且设置的大小差异很大。

4

1 回答 1

0

如果您仔细阅读文档,您会看到 size 参数通常是输出缓冲区的大小(以字节为单位):

cbData [in]

lpData 参数指向的信息的大小,以字节为单位。如果数据的类型为 REG_SZ、REG_EXPAND_SZ 或 REG_MULTI_SZ,则 cbData 必须包括终止空字符的大小。

这当然会产生您需要:

WCHAR wStrExec[1024U];
RegSetValueExW(..., sizeof (wStrExec));
于 2014-01-14T20:15:53.153 回答