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));
};
答案 0 :(得分:-1)
将LPSTR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
更改为CHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
LPSTR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
的类型ComputerName
是LPSTR
数组,而不是LPSTR
。
答案 1 :(得分:-1)
对于CHAR[]
,您应该使用ComputerName
:
CHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
答案 2 :(得分:-1)
WinAPI使用CHAR
,WCHAR
和TCHAR
。 CHAR
始终映射到普通char
,WCHAR
映射到wchar_t
。
TCHAR
取决于编译器设置:在UNICODE
构建中,它等效于WCHAR
,在非UNICODE
至CHAR
中等效。 / p>
类似地,有LPSTR
,LPWSTR
和LPTSTR
,它们是分别指向XCHAR
计数器部分(L
)。您应该始终使用适当的对:
P
和CHAR
LPSTR
和WCHAR
LPWSTR
和TCHAR
旁注:在我的个人代码中,我永远不会使用那些毫无价值的LPTSTR
宏,而是直接使用*STR
...
具有以上信息:
[W|T]CHAR [const]*
很可能不是您想要的...