我正在研究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); 不管用。
答案 0 :(得分:1)
是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
An obsolete member that is retained for compatibility.
应用程序应使用的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;
}
答案 1 :(得分:-2)
解决方案:
SYSTEM_INFO siSysInfo;
的GetSystemInfo(安培; siSysInfo);
使用unsigned char instedof char。\ n
按照以下示例。
unsigned char text [700] = {“”};
strcat的(文字,(字符*)siSysInfo.dwOemId);
参考以下链接:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724423(v=vs.85).aspx