我正在研究vc++中的硬件特性。
我正在努力获得这个siSysInfo.dwOemId,但是dword is incompatible错误阻止了我
我甚至尝试过strcat(text,(char*)siSysInfo.dwOemId),但是没有用。
以下是我的代码
SYSTEM_INFO siSysInfo;
GetSystemInfo(&siSysInfo);
char parent[1000] = {""};
char text[700] = {""};
char str[700] = {""};
strcat(text, "<b><font color=\"yellow\"> ");
strcat(text,(char*)siSysInfo.dwOemId);
strcat(text, str);
strcat(text, "</font></b>");
AddLOG_message(text, 0, 0);
#pragma MESSAGE("TODO: testing")在控制台应用程序中,它作为printf工作(“OEM ID:%u\n",siSysInfo.dwOemId);
但在正常应用程序中- strcat(text,(char*)siSysInfo.dwOemId);不起作用。
发布于 2013-01-02 14:58:51
是的,word是可以通过系统总线AFAIK传递的数据位的数量的度量。因此,它不能兼容,因为对于16位平台,它将是16位,而对于64位平台,它将是64位。
关于那个strcat(text,(char*)siSysInfo.dwOemId),我非常确定dwOemId没有结束零,因此需要使用strncat(text, (char*)siSysInfo.dwOemId, sizeof(DWORD))或类似的东西。
看起来这不是一个字符串。我怀疑你已经关注了this sample,但你应该把注意力转向printf(" OEM ID: %u\n", siSysInfo.dwOemId)这一行。如您所见,它们使用%u格式化(unsigned int)。
根据MSDN的说法
dwOemId
为兼容而保留的过时成员。
应用程序应该使用联合的wProcessorArchitecture分支。
因此,这行代码可能如下所示:
switch(siSysInfo.wProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_AMD64: strcat(text, "x64"); break;
case PROCESSOR_ARCHITECTURE_ARM: strcat(text, "ARM"); break;
case PROCESSOR_ARCHITECTURE_IA64: strcat(text, "ia64"); break;
case PROCESSOR_ARCHITECTURE_INTEL: strcat(text, "x86"); break;
case PROCESSOR_ARCHITECTURE_UNKNOWN: strcat(text, "unknown"); break;
default:
/* code should be updated to include updates
* in wProcessorArchitecture enumeration */
strcat(text, "unidentified"); break;
}发布于 2013-01-02 15:36:44
解决方案:
SYSTEM_INFO siSysInfo;
GetSystemInfo(&siSysInfo);
使用无符号字符而不是字符。\n
请遵循下面的示例。
unsigned char text700 = {""};
strcat(文本,(char*)siSysInfo.dwOemId);
请参阅以下链接:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724423(v=vs.85).aspx
https://stackoverflow.com/questions/14118041
复制相似问题