代码之家  ›  专栏  ›  技术社区  ›  sum1stolemyname

64位环境下Delphi和C++的枚举

  •  0
  • sum1stolemyname  · 技术社区  · 16 年前

    我最近不得不处理不同的默认大小,用于delphi和C++中的枚举,因为我必须使用Delphi应用程序的C++ DLL。

    一个函数调用返回一个结构数组(或delphi中的记录),其中的第一个元素是枚举。

    为了实现这一点,我使用打包的记录(或对齐的(1)-结构)。但是,由于Delphi默认选择了EnUM变量的大小,并且使用了可能的最小数据类型(在我的情况下是字节),但是C++使用枚举作为枚举,所以我的数据没有被正确解释。

        {$Z4} 
        TTypeofLight = 
        (
            V3d_AMBIENT,
            V3d_DIRECTIONAL,
            V3d_POSITIONAL,
            V3d_SPOT
       );
       {$Z1}
    

    • 当我的结构在64位环境中编译时会变成什么样?
    • 默认C++整数是否增长到8字节?
    2 回复  |  直到 15 年前
        1
  •  2
  •   Stephane    16 年前

    Delphi没有64位的编译器,所以不能用64位编译程序。但是,您仍然可以将其编译并作为32位进程在64位操作系统上运行。在这种情况下,你的结构不会发生什么变化。

    这个库的问题有点复杂:如果将它编译为64位库,则根本无法在32位进程中加载它。但是,假设您要将它编译为64位,然后从64位进程中使用它,那么int变量的实际长度很可能会保持在32位(但并非所有情况都是这样)。

    有关更多信息,请参阅这篇维基百科文章:

    http://en.wikipedia.org/wiki/64-bit#Specific_data_models

        2
  •  3
  •   Zoë Peterson RRUZ    16 年前

    什么时候? Delphi支持64位编译整数大小将保持4字节,指针增加到8。FreePascal有PtrInt和PtrInt类型,它们是“足够大的整数来容纳指针”,Delphi可能会添加类似的内容。

    维基百科有一个 table 显示各种64位操作系统的数据类型大小,但现在推断Embarcadero将如何处理其他64位平台(Linux和OSX)还为时过早。