欢迎光临
我们一直在努力

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

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

3.4. Strings


In C, as in Delphi, a string is an array of char types. Often, a string declaration is used in combination with a constant declaration specifying the maximum string length, as the following example shows:

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

The first line declares a constant RAS_MaxEntryName with the value 256 specifying the maximum length of the string. The lines after it declare a struct (record) which contains a null-terminated string:

CHAR szEntryName[ RAS_MaxEntryName + 1 ];

The Delphi translation:

szEntryName : Array [0..RAS_MaxEntryName] of Char;

Why not Array [0..RAS_MaxEntryName+1] of Char? Recall that a C array starts with 0 and the declaration specifies the number of elements. Thus, Array [0..RAS_MaxEntryName+1] in Delphi is equivalent to [RAS_MaxEntryName+2] in C.




Back to contents


3.5. Enumerations – Two Methods


Enumerated types can be translated in two ways.


Method 1:

typedef enum _FINDEX_INFO_LEVELS {FindExInfoStandard,FindExInfoMaxInfoLevel} FINDEX_INFO_LEVELS;

This part of a C-header file translates easily to Delphi:

Type  TFindExInfoLevels = (FindExInfoStandard,                        FindExInfoMaxInfoLevel);

The ordinal Value of the item FindExInfoStandard is 0. In Delphi each enumeration starts with 0.


Method 2:


The following C-declaration is more problematic:

typedef enum _ACL_INFORMATION_CLASS {AclRevisionInformation = 1,AclSizeInformation} ACL_INFORMATION_CLASS

The “= 1” in the declaration forces C to start with the ordinal value 1. This is not possible in Delphi.


There are two ways to solve the problem.


Solution a): Declare the enumeration as

TACLInformationClass = (_Fill0,                         AclRevisionInformation,                         AclSizeInformation);

Solution b): Translate the enumeration as

CONST  AclRevisionInformation = 1;  AclSizeInformation = 2;TYPE  TACLInformationClass = DWord;

Thats no problem for this example. But in C its possible to specify the ordinal value of each item of the enumeration, for example:

Typedef enum _ENUMEXAMPLE {   Item1 = 5,  Item2 = 10,} ENUMEXAMPLE;

Using enumeration in Delphi the declaration would have to be done like this:

TEnumExample = (_Fill0,                 _Fill1,                 _Fill2,                 _Fill3,                 _Fill4,                 Item1,                 _Fill6,                 _Fill7,                 _Fill8,                 _Fill9,                 Item2);

This is hard to read and clumsy to maintain.


This works better:

CONST  Item1 = 5;  Item2 = 10;TYPE  TEnumExample = DWord;



Back to contents

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

相关推荐

  • 暂无文章