AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Plugins: Datenaustausch zwischen DLL und Hauptprogramm
Thema durchsuchen
Ansicht
Themen-Optionen

Plugins: Datenaustausch zwischen DLL und Hauptprogramm

Ein Thema von alleinherrscher · begonnen am 20. Okt 2009 · letzter Beitrag vom 27. Nov 2009
 
Benutzerbild von himitsu
himitsu

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

Re: Plugins: Datenaustausch zwischen DLL und Hauptprogramm

  Alt 21. Okt 2009, 12:24
IHost = interface; alle Funktionen/Ereignisse, welcher ein Plugin im Hauptprogramm aufrufen muß

THost = class(TObject, IHost); das interne Objekt der Anwendung

IPlugin = interface; die Schnittstelle zum Plugin, welche jedes Plugin implementiert
hier sind die Funktionen drinnen, welche die Anwendung im Plugin aufrufen muß/kann

TPlugin = class(TObject, IPlugin); das interne Objekt des Plugins

Delphi-Quellcode:
function GetPlugin(Host: IHost): IPlugin; StdCall;
begin
  Result := TPlugin.Create(Host);
end;
das wäre dann z.B. 'ne Funktion, welche die Plugin-DLL exportiert, womit die Anwendung ihr Callback-Interface mitteilt und als Ergebnis das Interface zum Plugin bekommt.

Die Objekte bleiben in ihrem jeweiligem Bereich und der Andere (EXE/DLL) bekommt immer nur das Interface


für den Stream
entweder TStreamAdapter, welcher irgendeinen Nachfahren von TStream kapseln kann (also auch TMemoryStream)

oder du leitest die TMemoryStream ab und implementierst selber das Interface

Delphi-Quellcode:
type
  IDelphiStream = interface['{65805750-623E-4719-AD79-A30FF6FCA3CA}']
    procedure SetSize(NewSize: Longint);
    function Write(const Buffer; Count: Longint): Longint;
    function Read(var Buffer; Count: Longint): Longint;
    function Seek(Offset: Longint; Origin: Word): Longint;
    procedure Clear;
    //procedure LoadFromStream(Stream: IDelphiStream);
    //procedure SaveToStream(Stream: IDelphiStream);
    //procedure LoadFromFile(const FileName: WideString);
    //procedure SaveToFile(const FileName: WideString);
    property Position: Int64 read GetPosition write SetPosition;
    property Size: Int64 read GetSize write SetSize64;
  end;
  TInterfacedMemoryStream = class(TMemoryStream, IDelphiStream);
nur die auskommentierten Methoden müßte man notfalls in TInterfacedMemoryStream noch implementieren, da sie vom "Original" abweichen.
> IDelphiStream ist klar, da man hier ja nicht kein TStream verwenden kann
> warum nicht IStream ... dessen definition weicht sehr stark von TStream ab (IStream = Windows und TStream = Borland/Delphi)
> WideString ist der einzige StringTyp, welchen man ohne Einschränkung über Modulgrenzen (EXE-DLL) hinweg nutzen kann (abgesehn von PChar, aber da muß man auch aufpassen und es geht nicht alles)
Ein Therapeut entspricht 1024 Gigapeut.
  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 00:53 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