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: 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: The Delphi translation: 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. 3.5. Enumerations – Two Methods Enumerated types can be translated in two ways. Method 1: This part of a C-header file translates easily to Delphi: 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: 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 Solution b): Translate the enumeration as Thats no problem for this example. But in C its possible to specify the ordinal value of each item of the enumeration, for example: Using enumeration in Delphi the declaration would have to be done like this: This is hard to read and clumsy to maintain. This works better:
#define RAS_MaxEntryName 256#define RASENTRYNAMEA struct tagRASENTRYNAMEARASENTRYNAMEA{ DWORD dwSize; CHAR szEntryName[ RAS_MaxEntryName + 1 ];};
CHAR szEntryName[ RAS_MaxEntryName + 1 ];
szEntryName : Array [0..RAS_MaxEntryName] of Char;
typedef enum _FINDEX_INFO_LEVELS {FindExInfoStandard,FindExInfoMaxInfoLevel} FINDEX_INFO_LEVELS;
Type TFindExInfoLevels = (FindExInfoStandard, FindExInfoMaxInfoLevel);
typedef enum _ACL_INFORMATION_CLASS {AclRevisionInformation = 1,AclSizeInformation} ACL_INFORMATION_CLASS
TACLInformationClass = (_Fill0, AclRevisionInformation, AclSizeInformation);
CONST AclRevisionInformation = 1; AclSizeInformation = 2;TYPE TACLInformationClass = DWord;
Typedef enum _ENUMEXAMPLE { Item1 = 5, Item2 = 10,} ENUMEXAMPLE;
TEnumExample = (_Fill0, _Fill1, _Fill2, _Fill3, _Fill4, Item1, _Fill6, _Fill7, _Fill8, _Fill9, Item2);
CONST Item1 = 5; Item2 = 10;TYPE TEnumExample = DWord;
