我正在尝试学习一些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);
问题是,如果例如密钥不存在,PrTNF显示:
错误代码2:T
有人能帮我吗?
我正在使用最新的Visual Studio 2015。
最佳答案
FormatMessage
是宏,将是使用Unicode的FormatMessageW
,或使用ANSI代码的FormatMessageA
,具体取决于是否定义了宏UNICODE
。
将char**
传递给函数,因此应该使用FormatMessageA
而不是FormatMessage
使函数显式使用ANSI代码,并移除对LPSTR
的转换。