AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL ShareMem D2007 -> XE7?

Ein Thema von Mavarik · begonnen am 1. Nov 2014 · letzter Beitrag vom 4. Nov 2014
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: DLL ShareMem D2007 -> XE7?

  Alt 3. Nov 2014, 16:32
Objekte grundsätzlich niemals über Modulgrenien (EXE/DLL) hinweg verwenden,
außer bei BPL, oder wo man selber die RTTI shared.

Zitat:
Das abgeleitete Object könnte ja in D2000 und XE7 unterschiedlich sein.
Ja, und es kann auch innerhalb der selben Version sich unterscheiden, abgesehn von den Änderungen durch Updates/Bugfixes.

TObject der DLL ist ein anderes als das TObject der EXE,
genauso bei allen anderen Klassen.

Wenn auf einer Seite ein Feld nicht benutzt wird, dann kann der Compiler das weglassen, womit dann alle nachfolgenden Adressen nicht mehr stimmen.
Der Offset nachfolgender Variablen verschiebt sich (aber nur in der einen RTTI) und auch die Position in der VMT verschiebt sich, bei virtuellen Methoden
und somit greift die andere Seite (EXE/DLL) mit ihrer eigenen RTTI auf was Falsches zu.
Also für alles was nicht (Byte,Word,Integer,Pointer,Widestring) ist einen "schönen" Wrapper bauen...

z.b. alles in einen Buffer "knallen" und den Pointer auf den Buffer übergeben...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#12

AW: DLL ShareMem D2007 -> XE7?

  Alt 3. Nov 2014, 16:54
Oder ein IInterface um das Objekt drumrum (also auch ein Wrapper ), da dort das Interface feste Indize besitzt (wenn man überall die selbe Definition verwendet) und es dann in jedem Modul eine passende Übersetzung für Interface<->Klasse gibt.

Und natürich nur statische Typen verwenden, also kein PChar, Char usw., sondern PAnsiChar, PWideChar usw.
Für Integer/NativeInt/Pointer würde es zwar auch gelten, aber da man eh keine 32-Bit-DLL in eine 64-Bit-EXE rein bekommt, und andersrum ebenfalls nicht, stört es hier nicht.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Nov 2014 um 16:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: DLL ShareMem D2007 -> XE7?

  Alt 4. Nov 2014, 14:28
Oder ein IInterface um das Objekt drumrum (also auch ein Wrapper ), da dort das Interface feste Indize besitzt (wenn man überall die selbe Definition verwendet) und es dann in jedem Modul eine passende Übersetzung für Interface<->Klasse gibt.
emm dazu nochmal auf deutsch bitte.

Natürlich nutze ich ein Interface.

Delphi-Quellcode:
    IFooDll = Interface
      ['{23763801-630D-4389-B214-398804635CA1}']
      Procedure Test(Var S : WideString);
      Function ShowPanel(ParentWnd:hwnd;R:TRect):hWnd;stdcall;
    End;
Und übergebe das Interface an die DLL

Delphi-Quellcode:
Procedure SetInterface(Var DLL:IFooDll);
begin
  DLL := TFoo.Create;
end;

Exports
  SetInterface;
Welchen Vorteil - den ich noch nicht gesehen habe - habe ich dadurch auch noch?

Mavarik
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 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