AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi DLL Exportiert ein Interface mit Strings...
Thema durchsuchen
Ansicht
Themen-Optionen

DLL Exportiert ein Interface mit Strings...

Ein Thema von Mavarik · begonnen am 9. Jun 2014 · letzter Beitrag vom 9. Apr 2017
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von Mavarik
Mavarik

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

AW: DLL Exportiert ein Interface mit Strings...

  Alt 9. Jun 2014, 13:24
Hauptproblem wird wohl sein, dass die DCU nicht für Unicode funktioniert.

Wenn du die Definition der Klasse kennst, dann erstelle dir diese Klasse neu (für die neuen Versionen).

Die Klasse selber holt sich eine Interface-Instanz von der DLL und reicht alle Anfragen darüber an die DLL durch und holt auch die Daten darüber zurück.

Am sinnvollsten wäre auch die Verwendung von PAnsiChar statt WideString und die neue Klasse benutzt als Parameter AnsiString statt string .
Unicode ist kein Thema... Geht von XE5 -> XE6. Die DLL soll aber auch mit Delphi 2007 Funktionieren..
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL Exportiert ein Interface mit Strings...

  Alt 9. Jun 2014, 14:13
und die neue Klasse benutzt als Parameter AnsiString statt string .
Achtung: AnsiString ist nicht gleich AnsiString.

Mit Umstellung auf Unicode wurde das AnsiString erweitert und ist daher nicht mehr wirkltich kompatibel zueinander.


Die DLL mit einer alten Delphiversion kompiliert, kommt mit der alten DCU klar, aber das Interface, welches die DLL veröffentlicht sollte daher maximal WideString oder PAnsiChar verwenden.
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
 
#13

AW: DLL Exportiert ein Interface mit Strings...

  Alt 9. Jun 2014, 14:57
OK..

Was ist mit einem TStream?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL Exportiert ein Interface mit Strings...

  Alt 9. Jun 2014, 15:52
Das ist eine Klasse? Siehe oben bei RTTI.
Und TMemoryStream, TStringStream, TBytesStream usw. geht auch wieder auf SharedMem hinaus.

Es gibt allerdings den IStream, aber der ist nicht kompatibel mit TStream's, wobei es dafür aber eine Wrapper-Klasse gibt.
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
 
#15

AW: DLL Exportiert ein Interface mit Strings...

  Alt 9. Jun 2014, 16:27
Es gibt allerdings den IStream, aber der ist nicht kompatibel mit TStream's, wobei es dafür aber eine Wrapper-Klasse gibt.
Wrapper-Klasse?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL Exportiert ein Interface mit Strings...

  Alt 9. Jun 2014, 16:40
TStreamAdapter
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
 
#17

AW: DLL Exportiert ein Interface mit Strings...

  Alt 10. Jun 2014, 09:51
Wrapper-Klasse?
OK. War vielleicht ein bisschen kurz...

TStreamAdapter
Also habe ich keine bessere Antwort verdient...
ok dann nochmal:

Danke für die Info zum IStream. Die Wrapper Klasse hier für habe ich gefunden. Hast Du ein Stück Beispiel-Code, wie man das
für eine bidirektionale Übergabe an eine DLL verwenden muss?

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

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

AW: DLL Exportiert ein Interface mit Strings...

  Alt 10. Jun 2014, 10:22
Eigentlich Recht einfach.

- TStream-Nachfolger können nicht direkt an IStream übergeben werden.
> TStream ist halt ein Delphi-Typ und ISteam kommt irgendwo aus dem OLE32, oder so.
> Gut, man hätte natürlich auf die Idee kommen können, die Methoden von IStream direkt in TStream einzubauen, damit man auch direkt darüber das IStream hätte supporten können, aber so schlau war wohl Keiner.

Man nimmt also irgendeinen Stream, packt ihn in den TStreamAdapter und überlegt sich dann noch, wer für die Freigabe sorgen soll.

Delphi-Quellcode:
type
  IMyIntf = interface
    function GetStream: IStream;
    procedure PutStream(S: IStream);
  end;

function TMyClass.GetStream: IStream;
begin
  Result := TStreamAdapter.Create(FStream, soReference);
end;

function TMyClass.GetStream: IStream;
begin
  Result := TStreamAdapter.Create(TFileStream.Create('Test.dat', 0), soOwned);
end;


begin
  MyIntf.PutStream(TStreamAdapter.Create(FStream, soReference));
end;

begin
  MyIntf.PutStream(TStreamAdapter.Create(TFileStream.Create('Test.dat', 0), soOwned));
end;
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
 
#19

AW: DLL Exportiert ein Interface mit Strings...

  Alt 10. Jun 2014, 11:25
Eigentlich Recht einfach.

Man nimmt also irgendeinen Stream, packt ihn in den TStreamAdapter und überlegt sich dann noch, wer für die Freigabe sorgen soll.
OK

Delphi-Quellcode:
Procedure Machwas(A,B:TStream);
var
  StreamA,
  StreamB : IStream;
begin
  StreamA := TStreamAdapter.Create(A,soReference);
  StreamB := TStreamAdapter.Create(B,soReference);
  DLL_MachWas(StreamA,StreamB); // Soweit richtig?
  // Und dann?
end;
Wenn die DLL_MachWas mit den Streams arbeitet? Wie kommt der Inhalt wieder zurück in A & B
oder arbeitet die DLL dann auf A & B oder einer Kopie?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL Exportiert ein Interface mit Strings...

  Alt 10. Jun 2014, 12:01
Das bleibt die ganze Zeit da drin.

Der Stream-Adapter leitert nur alle Zugriffe auf die TStream-Klasse um, welche über seine Methoden gemacht 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
Antwort Antwort
Seite 2 von 4     12 34      


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 21:51 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