SetString |
Top Previous Next |
User interface > Translation options > Input options > Extended "System.pas" > SetString
SetString doesn't exist in the C++Builder VCL. If this function is used in the translated code, an implementation of one's own is required. According to the Delphi help the declaration is:
procedure SetString(var s: string; buffer: PChar; len: Integer);
Also according to the Delphi help this declaration should be found in the System.pas. But only the following exists there:
procedure _SetString(s: PShortString; buffer: PChar; len: Byte);
Delphi2Cpp II uses such declarations - by removing the underscore - if nothing else is found. Indeed, just for the SetString function. Delphi2Cpp II corrects this declaration internally. But with the definition in d2c_system.pas, you don't need to write your own C++ implementation.
In d2c_system.pas there are three declarations of SetString.
procedure SetString(var S: AnsiString; Buffer: PChar; Len: Integer); overload; procedure SetString(var S: WideString; Buffer: PWideChar; Len: Integer); overload; procedure SetString(var S: ShortString; Buffer: PChar; Len: Integer); overload;
When the Delphi2Cpp II translator finds a call of SetString, it cannot distinguish between these declarations and will take just the first one it finds. That doesn't matter, because all three declarations have at first a variable string parameter, then a character pointer and then an integer parameter. This vague signature is all, that Delphi2Cpp II needs. But later the C++ compiler can chose the right alternative for the according string type.
The implementations of the procedures for AnsiStrings and WideStrings are quite trivial More interesting is the implementation for ShortStrings:
procedure SetString(var S: AnsiString; Buffer: PChar; Len: Integer); begin (*_ S[0] = Len; if ( Buffer != NULL ) memmove( &S[1], Buffer, Len ); _*) end;
The translation with Delphi2Cpp II results in:
void __fastcall SetString( AnsiString& S, char* Buffer, int Len ) { S[0] = Len; if ( Buffer != NULL ) memmove( &S[1], Buffer, Len ); }
|
This page belongs to the DelphiXE2Cpp11 Documentation |
DelphiXE2Cpp11 home Content |