Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi C++ zu Delphi Übersetzung (va_ -Befehle) (https://www.delphipraxis.net/138282-c-zu-delphi-uebersetzung-va_-befehle.html)

eagle616 6. Aug 2009 17:00


C++ zu Delphi Übersetzung (va_ -Befehle)
 
Hi

ich habe folgenden C++ Code und wüsste gerne wie das in Delphi aussieht bzw. was die Funktionen machen.

Code:
void CompiledPacket::Add(char* pString, ...)
{
   va_list args;
   va_start(args, pString);
   char string2[5000];
   vsprintf(string2, pString, args);
   va_end(args);
   Add((unsigned char*)string2, (unsigned long)strlen(string2), false);
}
Besonders interresieren mich die ... und die va_ -Befehle.

Achja Add ist eine andere Funktion :
Delphi-Quellcode:
 Add(pData : pointer; length : Cardinal; deleteString : boolean);
Code:
void Add(unsigned char* pData, unsigned long length, bool deleteString);

Frickler 13. Aug 2009 13:12

Re: C++ zu Delphi Übersetzung (va_ -Befehle)
 
Der Funktion "CompiledPacket::Add" kannst Du nach dem ersten, festen Parameter "pString" eine beliebige Zahl weiterer Parameter beliebigen Typs übergeben. In dem konkreten Fall ist "pString" ein Formatstring und die weiteren Parameter sind die Werte, die mittels dieses Formatstrings formatiert werden sollen.

In Delphi gibt es keine Funktionen mit beliebiger Anzahl Parameter; hier greift man auf "array of const" zurück, um den gleichen Effekt zu erzielen.

Das könnte dann so aussehen:
Delphi-Quellcode:
procedure TCompiledPacked.Add(const fmt: string; params: array of const);
var string2: string;
begin
  string2 := Format(fmt, params);
  Add(string2, Length(string2), false);
end;
Und wird so
Delphi-Quellcode:
Add('%s %.4d', ['Hallo', 123]);
aufgerufen.

eagle616 17. Aug 2009 09:21

Re: C++ zu Delphi Übersetzung (va_ -Befehle)
 
Ok

vielen Dank das mit den unendlich vielen Parametern hab ich mir schon gedacht aber die Delphi Lösung ist hilfreich.

Aber was hat es jetzt mit den va-Befehlen auf sich?

mfg eagle616

Frickler 25. Aug 2009 09:28

Re: C++ zu Delphi Übersetzung (va_ -Befehle)
 
Die va_ Befehle sind Macros.

Dazu gibt es hier eine wirklich sehr schön ausführliche Darstellung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz