我正在尝试学习一些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的转换。

10-06 06:39