delphi调用VC的DLL遇到个问题,发现Delphi的枚举类型和C是不等价。C的枚举类型的size总是4个字节,而Delphi是1个字节,请问如何在Delphi里让他占用4个字节??因为要调用DLL,指针地址传过去后结果总是不对!!急救

解决方案 »

  1.   

    {$A4} 按4字节对齐
    {$MINENUMSIZE 4} 4个字节枚举
      

  2.   

    {$A4} 按4字节对齐 
    {$MINENUMSIZE 4} 4个字节枚举请问这个在哪里定义?谢谢
      

  3.   

    type
    {$Z+}// 4字节  TMyEnum = (.....); {$Z-} // 还原1字节{$A4} // 4字节对其  TMyRecord = record
      .....
      end;{$A-} //还原
      

  4.   

    C和DELPHI里都定义为压缩型的,就可以了吧?
      

  5.   

    type
       TEnumType = (etElement_0,etElement_1,...);//正常的定义默认为一个字节,但是枚举类的成员的值是可以显式定义的,所以可以通过显式定义一个形式成员,用于撑大占位两字节占位
    type
       TEnumType = (etElement_0,etElement_1,...,etElementReserved=$7fff);//正常的定义四字节占位
    type
       TEnumType = (etElement_0,etElement_1,...,etElementReserved=$7fffffff);//正常的定义
      

  6.   

    添加一个Timer控件,然后双击Timer,写入以下代码:if Win32Platform = VER_PLATFORM_WIN32_NT then
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
    application.ProcessMessages
      

  7.   

    5楼的解释是可取的,
    将{$Z4}
    插入到要和C交互的枚举类型的声明中。
    type 
    {$Z4}// 4字节   TMyEnum = (ENUM1,ENUM2,...); {$Z1} // 还原1字节 
    对齐的意义在这里不大,靠边界对齐反而会使得数据的解释错误。
    因为Intel的数据是小端对齐的,按边界对齐解读反而正好把数据读反了。
    关键还是修改数据存储类型。