DWORD是不兼容的

时间:2013-01-02 06:56:00

标签: visual-c++

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

2 个答案:

答案 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