国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

如何將C/C++程序轉譯成Delphi(八)

2019-11-18 18:50:15
字體:
來源:轉載
供稿:網友

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 it's 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. It's 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;

上一篇:如何將C/C++程序轉譯成Delphi(九)

下一篇:如何將C/C++程序轉譯成Delphi(七)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 阿图什市| 蚌埠市| 睢宁县| 定兴县| 丘北县| 仲巴县| 揭阳市| 黄龙县| 邳州市| 宜宾市| 金阳县| 翁源县| 太原市| 额尔古纳市| 襄汾县| 高阳县| 双桥区| 万宁市| 福州市| 绥中县| 花垣县| 云浮市| 福贡县| 海城市| 珠海市| 沾益县| 台北县| 普兰店市| 蕲春县| 麻栗坡县| 沙雅县| 揭阳市| 盖州市| 福泉市| 呼伦贝尔市| 陇川县| 成都市| 合水县| 怀安县| 迁安市| 长武县|