这个问题有点狗血,一个内存的代码,IA32情况下可以运行,X64位就无法运行,遇到过几次这种情况了,大都是这个原因,记录一下。
使用一些函数时,我习惯将UINT32,UINT64这种直接设置成根据计算机的位数决定UINTN,很多时候可以,但有些时候函数使用的参数必须是32位或64位中的一种,不能混合使用。比如
Status = gBS->GetMemoryMap(&MemoryMapSize,MemoryMap,&MapKey,&DescriptorSize,&DescriptorVersion);
GetMemoryMap()函数用于获取系统中所有内存映射。
函数原型如下:
我将三个OUT都设置成UINTN,那么在64位下运行时,最后一个参数DescriptorVersion就是64位的参数了,不是函数本身想要的32位,就无法运行,报错C2220乱码,显示U1077,找不到nmake。
只需要在定义时将DescriptorVersion的类型改回UINT32就好了。
好像没有BIOS标签…