Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Interfaces und die DLL/Anwendung Grenze. (https://www.delphipraxis.net/135082-interfaces-und-die-dll-anwendung-grenze.html)

QuickAndDirty 4. Jun 2009 14:08


Interfaces und die DLL/Anwendung Grenze.
 
Hallo,
es gibt bereits einen ähnlichen Thread von heute, aber ich habe eher allgemeine Fragen.

Es gibt ja das Problem das Objekte in Anwendungen und DLL unterschiedliche RTTI Vectoren haben,
weshalb der IS Parameter nicht Funktioniert und es einige Risiken gibt wenn unterschiedliche
Compilerschalter benutzt wurden wenn man ein Objekt über die DLL/Anwendungs Grenze hinweg verwendet.

Nun habe ich des Öfteren vernommen, das es durchaus möglich ist Objekte in einer DLL zu erzeugen und sie
als INTERFACE in die Anwendung weiter zu geben. Ebenso auch umgekehrt.

1. Was muss ich dabei beachten?
2. Funktioniert die Referenzzählung über die DLL/Anwednungsgrenze hinaus?(müsste sie ja eigentlich)
3. Was ist mit Interfaces die String Parameter haben? Sharemem oder nicht?

sirius 4. Jun 2009 14:11

Re: Interfaces und die DLL/Anwendung Grenze.
 
1. Nix, du musst nur die gleiche IID (GUID) verwenden. Das ist ja auch das einzige, worauf sich ein Interface bezieht, da es ja keine RTTI besitzt.
2. ja klar
3. Nach wie vor genauso ungünstig. Da ändert sich leider nichts.

mkinzler 4. Jun 2009 14:12

Re: Interfaces und die DLL/Anwendung Grenze.
 
Zitat:

3. Was ist mit Interfaces die String Parameter haben? Sharemem oder nicht?
WideString verwenden

QuickAndDirty 4. Jun 2009 15:41

Re: Interfaces und die DLL/Anwendung Grenze.
 
@MKinzler:
Warum WideString?
Ist das nicht auch nur ein PWidechar? Gibts dazu bessere Compiler Magic?

himitsu 4. Jun 2009 15:48

Re: Interfaces und die DLL/Anwendung Grenze.
 
aus http://www.delphipraxis.net/internal...044677#1044677
Zitat:

Zitat von himitsu
Ansonsten könntest du auch einfach einen WideString nehmen, dieser wird von Delphi intern auf einen OLEStr umgeleitet, womit er über den Speichermanager der ole32.dll läuft
und demnach auch über Modulgrenzen hinweg verwendet werden kann.


QuickAndDirty 4. Jun 2009 16:10

Re: Interfaces und die DLL/Anwendung Grenze.
 
Muss ich die WideStrings dann zur weiteren Verabreitung noch mal zu DelphiSTRING Strings konvertieren, oder macht der
compiler das von alleine? Reicht ein Type Cast(vermutlich nicht)?

Gibt es die Stringfunktionen auch alle für widestring? wenn ja , warum sollte man dann überhaupt noch Delphistrings benutzen?
Sind die WideStrings imperformanter?

Sorry, aber irgendwie brauch ich mehr input.

mkinzler 4. Jun 2009 16:13

Re: Interfaces und die DLL/Anwendung Grenze.
 
man kann String und WideString gegenseitig zuweisen. mehr aber nicht. WideString ist kein nativer Stringtyp. es wird keine Referenzzählung unterstützt.

QuickAndDirty 4. Jun 2009 16:28

Re: Interfaces und die DLL/Anwendung Grenze.
 
Zitat:

Zitat von mkinzler
man kann String und WideString gegenseitig zuweisen. mehr aber nicht. WideString ist kein nativer Stringtyp. es wird keine Referenzzählung unterstützt.

Das bedeutet ich muss immer mit Kopien von Widestring arbeiten kann den aber problemlos über model grenzen hinweg weitergeben...
...dann muss ich mich aber auch um Instanzierung und Freigabe selbst kümmern?

mkinzler 4. Jun 2009 16:32

Re: Interfaces und die DLL/Anwendung Grenze.
 
Es kommt darauf an, was du alles mit dem String anfangen willst. String ist zwar performanter, aber durch ständiges umkopieren, geht dieser Vorteil schnell flöten.
Zitat:

...dann muss ich mich aber auch um Instanzierung und Freigabe selbst kümmern?
Nein, denn keiner der Typen ist eine Klasse.

QuickAndDirty 4. Jun 2009 16:36

Re: Interfaces und die DLL/Anwendung Grenze.
 
Ich sehe gerade man kann Widestrings nur mit eigenen Funktionen vergleichen etc. ? Wie in C .

Muss ich Widestring speicher eigenständig anfordern? Und wenn keine Referenzzählung unterstützt wird wie gebe ich Widestrings wider frei?

Gehen Widestrings nur über Getmem und Freemem?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
Seite 1 von 2  1 2      

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