无法让Visual Studio C++使用巨大的指针编译旧代码,如何转换?

xqkwcwgp  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(159)

我正在尝试刷新一些旧代码,例如:

BYTE huge *    _lpDIBHdr;            // Pointer to BITMAPINFOHEADER

在里面。怎么做最好?谢谢。

yptwkmov

yptwkmov1#

这显然是为16位实模式x86代码编写的,其中需要huge才能有大于64 KB的数组。参见What are near, far and huge pointers?和人们使用什么约定和语言扩展来编写8086和80286?
如果幸运的话,这是代码中唯一特定于x86-16的部分,否则它是可移植的标准C。在这种情况下,您只需删除huge关键字的所有示例,或者在每个源文件的顶部插入#define huge /* nothing */。在32位或64位编译器中没有这样的64 KB限制。可以类似地处理nearfar
如果你运气不好,那么代码可能包含很多其他的示例,比如不可移植的x86-16特定代码,你将有一个漫长的移植项目等着你,这可能包括huge这样的示例,它们是公开的(程序无法编译),或者更微妙的(程序编译但不能正确运行,或者包含难以发现的bug)。

相关问题