"Identifier" 未声明的标识符

"Identifier" Undeclared Identifier

现在我尝试将代码中的字符集从多字节更改为 unicode,但是当我编译这段代码时出现错误,这是我的错误

error C2065: 'LtszCommConfigFile' : undeclared identifier

我不知道为什么会这样?,我已经声明了 LtszCommConfigFile 标识符,但我仍然遇到错误

这是我的完整代码

CString CCommApiHelper::GetTerminalNum(LPCTSTR  lpszCommonPath, BOOL bIsCyber)
{
    TCHAR                   tszCommConfigFile[MAX_PATH] = {0, };
    TCHAR                   tszTermNum[9] = {0, };
    CString                 strTermNum;

    _stprintf(tszCommConfigFile, L"%s\CommInfo.ini", lpszCommonPath);

    if ( GetPrivateProfileInt(L"TEST_INFO", L"IS_TERM_ID", 0, tszCommConfigFile) == 1 )
    {
        GetPrivateProfileString(L"TEST_INFO", L"TERM_ID", L"A0000000", tszTermNum, sizeof(tszTermNum), tszCommConfigFile);
        strTermNum = tszTermNum;
        return      strTermNum;
    }

    int x1, x2, x3, x4;
    x1 = GetPrivateProfileIntA("IP_INFO", "A_CLASS", 0, _T(tszCommConfigFile));
    x2 = GetPrivateProfileIntA("IP_INFO", "B_CLASS", 0, _T(tszCommConfigFile));
    x3 = GetPrivateProfileIntA("IP_INFO", "C_CLASS", 0, _T(tszCommConfigFile));
    x4 = GetPrivateProfileIntA("IP_INFO", "D_CLASS", 0, _T(tszCommConfigFile));

    if ( (x2 / 10) == 10 )                          tszTermNum[1] += '1';       // 105 or 109
    else if ( (x2 / 10) == 20 )                     tszTermNum[1] += '2';       // 205 or 209
    else                                            tszTermNum[1] += '0';   

    _stprintf(&tszTermNum[2], L"%03d%03d", x3, x4);
    strTermNum = tszTermNum;
    return      strTermNum;
}

谢谢

_T 仅适用于字符串文字(例如“hello world”)。你不能在变量上使用它。

_TTEXTTCHARLPCTSTR 等是古老的历史,在 1990 年代使用,当时人们想编写同时适用于 [=28] 的代码=] 95 和 Windows XP。根本没有理由在现代代码中使用它们。

改为对窄字符 (ASCII) 使用 char 和相关类型,对宽字符 (Unicode) 使用 wchar_t 和相关类型。

您的具体错误似乎是在您应该使用 GetPrivateProfileIntW 时使用了 GetPrivateProfileIntA。即

x1 = GetPrivateProfileIntW(L"IP_INFO", L"A_CLASS", 0, tszCommConfigFile);