首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCHAR与LPSTR不兼容

TCHAR与LPSTR不兼容
EN

Stack Overflow用户
提问于 2019-02-15 16:49:49
回答 3查看 738关注 0票数 1

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

我该如何解决这个问题?我已尝试转换/转换该类型,但无济于事

代码语言:javascript
复制
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)); 
};
EN

回答 3

Stack Overflow用户

发布于 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

票数 -1
EN

Stack Overflow用户

发布于 2019-02-15 16:58:50

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

代码语言:javascript
复制
CHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
票数 -1
EN

Stack Overflow用户

发布于 2019-02-15 16:59:13

WinAPI使用CHARWCHARTCHARCHAR总是映射到normal charWCHAR映射到wchar_t

不过,TCHAR依赖于编译器设置:在UNICODE构建中,它等同于WCHAR,而在非UNICODE to CHAR中,它等同于编译器设置。

类似地,还有LPSTRLPWSTRLPTSTR,这些是指向它们各自的XCHAR计数器部分的指针(Long Pointer)。您应该始终使用适当的配对:

  • CHARLPSTR
  • WCHARLPWSTR
  • TCHAR andLPTSTR

附注:在我的个人代码中,我永远不会使用那些毫无价值的*STR宏,而是直接使用[W|T]CHAR [const]*……

有了上面的信息:

代码语言:javascript
复制
LPSTR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
// is equivalent to:
CHAR* ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
//  ^

很可能不是你想要的.

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54705546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档