TCHAR与LPSTR不兼容

时间:2019-02-15 08:49:49

标签: c++ casting

TCHAR的参数类型与LPSTR的参数类型不兼容。

我该如何解决?我尝试过转换/转换类型无用

void getHWID()
{
// GetVolumeInformationA
DWORD DriveSerial;

// GetComputerNameA
LPSTR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
DWORD size = sizeof(ComputerName) / sizeof(ComputerName[0]);
// OS GUID
HW_PROFILE_INFO hwProfileInfo;
DWORD OsGUID;
GetVolumeInformationA(0, nullptr, '\0', &DriveSerial, nullptr, nullptr, nullptr, 0);
GetComputerNameA(ComputerName, &size);
GetCurrentHwProfileA(&hwProfileInfo);
memcpy(&OsGUID, &hwProfileInfo.szHwProfileGuid, sizeof(hwProfileInfo.szHwProfileGuid)); 
};

3 个答案:

答案 0 :(得分:-1)

LPSTR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];更改为CHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];

LPSTR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];的类型ComputerNameLPSTR 数组,而不是LPSTR

答案 1 :(得分:-1)

对于CHAR[],您应该使用ComputerName

CHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];

答案 2 :(得分:-1)

WinAPI使用CHARWCHARTCHARCHAR始终映射到普通charWCHAR映射到wchar_t

TCHAR取决于编译器设置:在UNICODE构建中,它等效于WCHAR,在非UNICODECHAR中等效。 / p>

类似地,有LPSTRLPWSTRLPTSTR,它们是分别指向XCHAR计数器部分(L )。您应该始终使用适当的对:

  • PCHAR
  • LPSTRWCHAR
  • LPWSTRTCHAR

旁注:在我的个人代码中,我永远不会使用那些毫无价值的LPTSTR宏,而是直接使用*STR ...

具有以上信息:

[W|T]CHAR [const]*

很可能不是您想要的...