欢迎光临
我们一直在努力

如何将c/c++程序转译成delphi(八)_delphi教程

建站超值云服务器,限时71元/月

3.6. Structures, Records


3.6.1. Simple Structures


C structures are similar to records in Delphi. Structures are usually defined with the typedef keyword, but its also possible to do it with #define.


The format of a structure declaration is


{Struct|Union} [OptIdentifier] [TagName]
{ FieldDefinitions [; …]}
[Name […]]


You can ignore the TagName. Its used in C for subsequent references to the structure.


This is how the fields within a structure are defined:

#define RASENTRYNAMEA struct tagRASENTRYNAMEARASENTRYNAMEA{    DWORD dwSize;    CHAR  szEntryName[ RAS_MaxEntryName + 1 ];};

This C declaration defines a record (structure) named RASENTRYNAMEA. The Delphi-style name would be TRASENTRYNAMEA. This structure contains two fields: the first is named dwSize and has the type DWord. The second field is an array of char with RAS_MaxEntryName + 1 elements.


The Delphi translation:

TYPE  PRASEntryName = ^TRASEntryName  TRASEntryName = Record    dwSize : DWORD;    szEntryName : Array [0..RAS_MaxEntryName] of Char  end

Remember, you may not declare the array of char with a range from 0 to RAS_MaxEntryName+1. The reason is, that in C the number of elements is specified, but in Delphi the range of elements. Read more in the chapters about Arrays and Strings.




Back to contents


3.6.2 Unions in Structures


C unions in structures are comparable to variant parts of records in Delphi. Blocks declared in a union structure are not consecutive but overlaid.

typedef struct _PROCESS_HEAP_ENTRY {    PVOID lpData;    DWORD cbData;    BYTE cbOverhead;    BYTE iRegionIndex;    WORD wFlags;    union {        struct {            HANDLE hMem;            DWORD dwReserved[ 3 ];        } Block;        struct {            DWORD dwCommittedSize;            DWORD dwUnCommittedSize;            LPVOID lpFirstBlock;            LPVOID lpLastBlock;        } Region;    };} PROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY;

This is the translation into Delphi:

type  PProcessHeapEntry = ^TProcessHeapEntry;  TProcessHeapEntry = Record    lpData: Pointer;    cbData: DWord;    cbOverhead: Byte;    iRegionIndex: Byte;    wFlags: Word;    case Integer of      0: (Block: Record            hMem: Thandle            Reserved : Array [0..2] of DWord;          end);      1: (Region: Record            dwCommittedSize: DWord;            dwUnCommittedSize: DWord;            lpFirstBlock: Pointer;            lpLastBlock: Pointer          end);  end;

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 如何将c/c++程序转译成delphi(八)_delphi教程
分享到: 更多 (0)

相关推荐

  • 暂无文章