Einzelnen Beitrag anzeigen

Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Plugins: Datenaustausch zwischen DLL und Hauptprogramm

  Alt 21. Okt 2009, 15:12
Herzlichen Dank - komplett Verstanden aber da wäre ich nie selber drauf gekommen. Interfaces sind nützlicher als gedacht! Ich habe zum test mal folgendes programmiert:


Delphi-Quellcode:
//Hauptanwendung schickt ein Bild in einem Memorystream an DLL:
procedure TForm1.Button1Click(Sender: TObject);
var app:tapp;
    astream:TInterfacedMemoryStream;
begin

  app:=tapp.create;
  StartPlugin('P_DLL.dll',app); //Sucht Procedur "LoadPlugin" in der DLL und übergibt den Zeiger auf APP an das Plugin.
                                //Der Zeiger auf TPlugin wird in PluginList gespeichert.

  showmessage('GetName: '+PluginList[0].Getname); //Funktioniert einwandfrei

  astream:=TInterfacedMemoryStream.Create;
  astream.LoadFromFile('C:\Autumn Leaves.jpg');

  PluginList[0].ReceiveStream(astream);

end;
Delphi-Quellcode:
//DLL erhält Stream korrekt und schickt ihn direkt mal wieder zurück an Hauptanwendung (einfach nur als Test der "Durchgängigkeit"):
procedure TPlugin.ReceiveStream(aStream: IDelphiStream); stdcall;
  begin
    App.AddStream(astream);

  end;
Delphi-Quellcode:
//Hauptanwendung erhält Stream wieder zurück:
procedure TApp.AddStream(aStream: IDelphiStream); stdcall;
begin
 TInterfacedMemoryStream(astream).position:=0;
 TInterfacedMemoryStream(astream).SaveToFile('C:\test2.jpg');
end;
Allerdings wird bei "TInterfacedMemoryStream(astream).position:=0; " eine Access Violation hervorgerufen, die ich noch nicht verstehe.
Hast du da evtl noch eine Idee?

„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat