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 1 von 2  1 2      
Benutzerbild von Mavarik
Mavarik

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

DLL ShareMem D2007 -> XE7?

  Alt 1. Nov 2014, 13:36
Hallo Zusammen!

Wie mache ich am besten ein DLL mit XE7 die ich von einem D2007 Programm aus aufrufen kann..

Das Beispiel SimpleSharemem funktioniert nicht..

Oder doch mit PChars arbeiten?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: DLL ShareMem D2007 -> XE7?

  Alt 1. Nov 2014, 14:46
Aufrufen kannst Du doch immer, oder?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL ShareMem D2007 -> XE7?

  Alt 1. Nov 2014, 17:11
PChar schonmal garnicht.
Entweder PAnsiChar oder PWideChar.

Denn der LongString (AnsiString) ist nicht kompatibel, da man in 2009 die Typ intern um zwei neue Felder erweitert hat (CharSize und CodePage),
also ein schreibender Zugriff geht überhaupt nicht und maximal kann ein älteres Delphi den neueren Stringtypen auslesen, aber nicht andersrum.


Bezüglich SharedMem brauchst du natürlich auf beiden Seiten eine kompatible Version. (so könnte man z.B. jeweils ein aktuelles FastMM in beide Programmteile integrieren)

Alternativ zu PAnsiChar/PWideChar ginge natürlich noch der WideString, wofür schon ein eigenes SharedMem gibt. (OleAut32.dll)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Nov 2014 um 17:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: DLL ShareMem D2007 -> XE7?

  Alt 2. Nov 2014, 10:24
Alternativ zu PAnsiChar/PWideChar ginge natürlich noch der WideString, wofür schon ein eigenes SharedMem gibt. (OleAut32.dll)
LOL... OK Das wusste ich noch nicht... Das ist alles?

Es funktioniert Prima... Wofür den der Sharemem Quark?

Grüsse Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL ShareMem D2007 -> XE7?

  Alt 2. Nov 2014, 11:32
WideString ist ein bissl langsamer.
  • hat keine Referenzzählung
  • man sollte bei Parameterübergaben niemals das CONST vergessen
  • zwischen den "normalen" Delphistrings und Dem muß es erst umkopiert werden
  • ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: DLL ShareMem D2007 -> XE7?

  Alt 2. Nov 2014, 12:01
WideString ist ein bissl langsamer.
Bissl ist gut...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: DLL ShareMem D2007 -> XE7?

  Alt 3. Nov 2014, 09:31
  • man sollte bei Parameterübergaben niemals das CONST vergessen
Wieso CONST und nicht VAR?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL ShareMem D2007 -> XE7?

  Alt 3. Nov 2014, 10:06
Bei VAR wird die Referenz unverändert reingegeben, da ist es egal.

Bei prodecure Test(S: WideString); wird aber eine 100%-Kopie des Strings erstellt, bei Aufruf der Prozedur.
Bei LongStrings (AnsiString/RawByteString/UTF8String und UnicodeString) wird einfach nur die Referenzzählung schnell hochgezählt, was praktisch nicht auffällt.

Bei prodecure Test(const S: WideString); passiert das nicht, da direkt mit der schreibgeschützten Referenz gearbeitet wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: DLL ShareMem D2007 -> XE7?

  Alt 3. Nov 2014, 13:21
Bei VAR wird die Referenz unverändert reingegeben, da ist es egal.

Bei prodecure Test(S: WideString); wird aber eine 100%-Kopie des Strings erstellt, bei Aufruf der Prozedur.
Bei LongStrings (AnsiString/RawByteString/UTF8String und UnicodeString) wird einfach nur die Referenzzählung schnell hochgezählt, was praktisch nicht auffällt.

Bei prodecure Test(const S: WideString); passiert das nicht, da direkt mit der schreibgeschützten Referenz gearbeitet wird.
Ahh dann ist gut. Dachte schon VAR würde nicht gehen...
Was ist z.B. mit TObject... ? Das abgeleitete Object könnte ja in D2000 und XE7 unterschiedlich sein.

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL ShareMem D2007 -> XE7?

  Alt 3. Nov 2014, 13:40
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:19 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