0

我正在研究 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); 不管用。

4

2 回答 2

1

word的,是衡量可以通过系统总线传递的数据位数量,AFAIK。因此它不能兼容,因为对于 16 位平台,它将具有 16 位,而对于 64 位平台,它将具有 64 位。

关于这一点,strcat(text,(char*)siSysInfo.dwOemId)我很确定它dwOemId没有以零结尾,因此需要使用 ofstrncat(text, (char*)siSysInfo.dwOemId, sizeof(DWORD))或类似的东西。

看起来这无论如何都不是字符串。我怀疑你已经遵循了这个示例,但你应该把目光转向这条线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;
}
于 2013-01-02T06:58:51.363 回答
-2

解决方案:

SYSTEM_INFO siSysInfo;

GetSystemInfo(&siSysInfo);

使用 unsigned char instedof char。\n

按照下面的例子。

无符号字符文本[700] = {""};

strcat(文本,(char*)siSysInfo.dwOemId);

请参考以下链接:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724423(v=vs.85).aspx

于 2013-01-02T07:36:44.110 回答