Einzelnen Beitrag anzeigen

Benutzerbild von phreax
phreax

Registriert seit: 1. Mai 2006
Ort: Dresden
147 Beiträge
 
Turbo Delphi für Win32
 
#1

Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 13:23
Hallo zusammen,
Ich hoffe ich habe die richtige Sparte erwischt.

Ich möchte Mittels eines Interfaces Datenstrukturen zwischen meiner Anwendung und einer Dll tauschen.

folgendes Interface:
Delphi-Quellcode:
type IMyException = interface
  ['{682DE719-6008-404D-8921-D648F35FC1D7}']
  function Msg: String; stdcall;
  function ErrorClassName: String; stdcall;
  function GetProcName: String;
  procedure SetProcName(Value: String);
  property ProcName: String read GetProcName write SetProcName;
end;
Die Anwendung soll nun darauf zugreifen können:
Delphi-Quellcode:
function GetLastError: IMyException; stdcall; external 'TestPlugin';
//...
ShowMessage(GetLastError.Msg);
Und in der DLL
Delphi-Quellcode:
var fLastError: IMyException;
//...
function GetLastError: IMyException; stdcall;
begin
  Result := fLastError;
end;
//...
  except
    on E: Exception do
      begin
        Result := False;
        fLastError := TMyException.Create(E);
      end;
  end;
Geht das jetzt ohne Sharemem? Die Interfacestrukturen enthalten ja Funktionen die Strings zurückgeben...
Oder ist das ganze durch die Interfaces so gekapselt, das die Memorymanager von DLL und Anwendung nicht ins Gehege kommen?
Bei Tests hat es jedenfalls funktioniert, aber es kann ja sein das ich mit dem Feuer spiele

Grüße phreax
Und dann war da noch der junge Mann ....
... der unbedingt Schriftsteller werden wollte.
Er wollte Emotionen wecken und die Leute zum weinen bringen.
Sein Traum wurde wahr, er verfasst heute die Fehlermeldungen bei Microsoft!
  Mit Zitat antworten Zitat