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));
};发布于 2019-02-15 16:58:38
将LPSTR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];更改为CHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
LPSTR ComputerName[MAX_COMPUTERNAME_LENGTH + 1]; ComputerName的类型是LPSTR数组,但不是LPSTR。
发布于 2019-02-15 16:58:50
对于ComputerName,您应该使用CHAR[]
CHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];发布于 2019-02-15 16:59:13
WinAPI使用CHAR、WCHAR和TCHAR。CHAR总是映射到normal char,WCHAR映射到wchar_t。
不过,TCHAR依赖于编译器设置:在UNICODE构建中,它等同于WCHAR,而在非UNICODE to CHAR中,它等同于编译器设置。
类似地,还有LPSTR、LPWSTR和LPTSTR,这些是指向它们各自的XCHAR计数器部分的指针(Long Pointer)。您应该始终使用适当的配对:
CHAR、LPSTRWCHAR和LPWSTRTCHAR andLPTSTR附注:在我的个人代码中,我永远不会使用那些毫无价值的*STR宏,而是直接使用[W|T]CHAR [const]*……
有了上面的信息:
LPSTR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
// is equivalent to:
CHAR* ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
// ^很可能不是你想要的.
https://stackoverflow.com/questions/54705546
复制相似问题