AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Klasseninstanz an DLL-Funktion übergeben (TStrings)
Thema durchsuchen
Ansicht
Themen-Optionen

Klasseninstanz an DLL-Funktion übergeben (TStrings)

Ein Thema von Sharky · begonnen am 1. Jan 2007 · letzter Beitrag vom 5. Jan 2007
 
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Klasseninstanz an DLL-Funktion übergeben (TStrings)

  Alt 1. Jan 2007, 19:36
Ich habe gerade kein Delphi hier. (hier <> @home )
Muss mir das also etwas aus den Fingern saugen....
Was Bernhard da angesprochen hat lässt sich auch ohne COM realisieren. Delphi Interfaces erfüllen die COM-Pflichten, sie sind also binär kompatibel zueinander. Auch wenn du sie in 2 Binaries kompilierst (Deine Echse und die DLL).
Du benutzt in der Methode oben eigentlich nur die Methode Add von TSTrings. Das Interface was man hier braucht müsste also nur die Methode Add besitzen:
Delphi-Quellcode:
type
  IStringList = interface(IUnknown)
  ['bli-bla-blubb'] //hier ctrl+g drücken ;)
    function Add(const aString : String) : Integer;
  end;
Solange Delphi mit Delphi in der gleichen Version "redet" kann man String benutzen, solange ShareMem/FastMM als erste Unit in der DLL und in der Echse verwendet wird.
Die StringList version, die du in der Echse benutzt, muss natürlich noch das Interface implementieren.
Da ich (hoffentlich) die gleiche Signatur der Methode in dem Interface habe, wie sie bereits in TStrings deklariert ist, sollte das ziemlich easy sein:
Delphi-Quellcode:
type
  TMyStringlist = class(TStringList , IStringList)
  private
    fStringList : TStringList;
  protected
   // hier die Methoden von System.TInterfacedObject reinkopieren
  public
    constructor Create;
    destructor Destroy; override;
  end;
...
constructor TMyStringlist.Create;
begin
  fStringList := TStringList.Create();
end;

destructor TMyStringlist.Destroy;
begin
  fStringList.Free();
end;
Die Unit mit dem Interface kannst du in Echse und DLL benutzen. Die TMyStringList sollte aber niemals direkt zwischen den beiden übergeben werden sondern nur als Referenz auf IStringList.
Wenn du es übergibst, sollte der Parameter immer schön als "const" übergeben werden. Dadurch findet keine Referenzzählung statt und Delphi wird dir beim erreichen der 0 nicht die Instanz töten, obwohl du damit wahrscheinlich noch arbeiten willst.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
 


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 05:34 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