Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ByRef/ByVal übergaben von Widestring in Com-Objekt? (https://www.delphipraxis.net/54545-byref-byval-uebergaben-von-widestring-com-objekt.html)

Icemanemp 6. Okt 2005 12:31


ByRef/ByVal übergaben von Widestring in Com-Objekt?
 
Hi,

mich würde gerne folgendes interessieren!
Ich habe ein Com-Objekt, das per Get-Set-Methoden String intern speichert.
Die Daten kommen aus einer TQuery bzw. den TFields der Query.

GetAsString sollte ja ein AnsiString liefern.
Die Set-Methode des Com-Objektes hat ein Widestring.

Macht es Performancetechnisch etwas aus die Parameterübergabe der Set-Methode mit const zu deklarieren oder bringt das nichts, da Widestring intern ja so oder so ein Referenzzähler hat und keine Kopien anlegt?

P.S. die Set-Methode wird z.Z. etwas 2000 aufgerufen, wegen den vielen Datensätzen...

Danke

Bernhard Geyer 6. Okt 2005 12:54

Re: ByRef/ByVal übergaben von Widestring in Com-Objekt?
 
Widestrings als Const zu definieren bringt sehr wohl was (Referenzzählung wird bei Widestrings in Delphi nicht verwendet.
Jedoch weiß ich nicht ob bei der Setter-Methode einfach die Methodensignatur ändern darfst und ob damit die Methode noch als Setter erkannt wird.

negaH 6. Okt 2005 14:20

Re: ByRef/ByVal übergaben von Widestring in Com-Objekt?
 
Zitat:

da Widestring intern ja so oder so ein Referenzzähler hat und keine Kopien anlegt?
Widestring hat keine Referenzzählung, also macht es meiner Meinung nach keinen Unterschied ob der Parameter als const oder nicht deklariert wurde.

Wird der Parameter nicht intern geändert so solltest du denoch diesen als const deklarieren, einfach der Sauberkeit halber.

als var kann man diese Methode nicht mehr als Setter benutzen.

Intern, falls du im Source mit LongStrings arbeitest, wird der WideString autom. per Kopierung in einen LongString umgewandelt. Der Overhead der Allokation/Deallokation von WideStrings ist ebenfalls nicht unerheblich da dies durch die OLE32 DLL erfolgt.

Ich benutze aber ebenfalls in meinen Interfaces WideStrings da sie komplatibel sind, im Gegensatz zu LongStrings.

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr.

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