gpt4 book ai didi

c - 带有 FormatMessage 函数的 printf

转载 作者:太空宇宙 更新时间:2023-11-04 01:56:13 30 4
gpt4 key购买 nike

我正在尝试学习一些 WinAPI 知识,并且正在使用 RegOpenKeyEx 函数。我有这段代码:

LPCTSTR subKey;
subKey = TEXT("WinSide");
HKEY hKey = HKEY_CURRENT_USER;
DWORD options = 0;
REGSAM samDesired = KEY_READ | KEY_WRITE;
HKEY hResult;


long openKey = RegOpenKeyEx(hKey, subKey, options, samDesired, &hResult);

if (( openKey == ERROR_SUCCESS))
{
printf_s("Registry subkey opened! \n");


}

else
{


char *errorMsg = NULL;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,openKey, 0, (LPSTR)&errorMsg,0,NULL);

printf("Error code %i: %s\n", openKey, errorMsg);
LocalFree(errorMsg);


}

RegCloseKey(hResult);

问题是,例如,如果 key 不存在,printf 会显示:

Error code 2: T

谁能帮帮我?

我使用的是最新的 Visual Studio 2015。

最佳答案

FormatMessage 是一个宏,将是使用 Unicode 的 FormatMessageW 或使用 ANSI 代码的 FormatMessageA,具体取决于宏 UNICODE 已定义。

您将 char** 传递给该函数,因此您应该使用 FormatMessageA 而不是 FormatMessage 以使其显式使用 ANSI 代码,并且删除对 LPSTR 的强制转换。

关于c - 带有 FormatMessage 函数的 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33941656/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com