Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#31

AW: TCollection = not TCollection ?

  Alt 7. Jul 2011, 18:29
Dann nimm eben keine DLL, sondern eine BPL. [...]
Die muss man aber Installieren oder?
Nein, mit LoadPackage laden.
http://edn.embarcadero.com/article/27178

Was eine DLL angeht, so müsstest du als Parameter auch Interfaces, z.B. abgeleitet von IUnknown, übergeben können. Denn die werden via COM verwaltet. Also so ca., ungetestet:
Delphi-Quellcode:
library xyz;

uses
  MyInterface;

procedure DoIt(AObject: ITest); stdcall;
begin
  MessageBox(0, AObject.GetMsg, 'test', MB_ICONINFORMATION or MB_OK);
  AObject.ShowMsg('Hallo');
end;

exports
  DoIt;
Delphi-Quellcode:
unit MyInterface;

interface

type
  ITest = interface(IUnknown)
    procedure ShowMsg(Value: PWideChar); stdcall;
    function GetMsg: PWideChar; stdcall;
    procedure SetMsg(Value: PWideChar); stdcall;
  end;
Benutzung:
Delphi-Quellcode:
uses
  MyInterface;

type
  TTest = class(TInterfacedObject, ITest)
  private
    FTest: string;
  public
    procedure ShowMsg(Value: PWideChar); stdcall;
    function GetMsg: PWideChar; stdcall;
    procedure SetMsg(Value: PWideChar); stdcall;
  end;

procedure DoIt(AObject: ITest); stdcall; external 'xyz.dll';

implementation

function TTest.GetMsg: PWideChar;
begin
  Result := PWideChar(FTest);
end;

procedure TTest.SetMsg(Value: PWideChar);
begin
  FTest := Value;
end;

procedure TTest.ShowMsg(Value: PWideChar);
begin
  ShowMessage(Value);
end;
Delphi-Quellcode:
var
  Test: ITest;
begin
  Test := TTest.Create;
  Test.SetMsg('Hallöchen');
  DoIt(Test);
  Test := nil; // explizite Freigabe, nur nötig, wenn sonst der Scope zu groß wäre
Vielleicht hilft dir das ja dabei das so zu kapseln oder so.

// EDIT:
Also ich denke da an so etwas wie ein Interface, das du der DLL übergibst und das in der Anwendung die Daten abruft und in Interface-Objekten der DLL liefert
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke ( 7. Jul 2011 um 18:31 Uhr)
  Mit Zitat antworten Zitat