2

我想知道是否可以使用 ctypes 处理 Delphi Packed 记录。我有一个用 Delphi 编写的 dll,它公开了一些带有 stdcall 约定的方法。

方法之一是返回一个像这样打包的自定义记录:

TMapCell = packed record
    Tile : Word;
    Z : Shortint;
end;

当记录没有打包时,我可以这样处理它们:

class TMapCell(Structure):
    _fields_ = [
        ('Tile', c_ushort),
        ('Z', c_byte),
    ]

但是当我尝试使用它时,我遇到了访问冲突错误

WindowsError: exception: access violation writing 0x0000112D
4

1 回答 1

3

指定_pack_控制包装的属性:

class TMapCell(Structure):

    _pack_ = 1

    _fields_ = [
        ('Tile', c_ushort),
        ('Z', c_byte),
    ]

当然,如果您一开始就避免打包记录,那就更好了。总是喜欢对齐的记录。

于 2013-10-09T21:45:03.117 回答