Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#1

Klasseninstanz an DLL-Funktion übergeben (TStrings)

  Alt 1. Jan 2007, 09:46
Hai ihr,

ich bin nun "gezwungen" mich endlich mit DLLs zu beschäftigen

Immer lese ich das es Probleme gibt wenn man einen Delphi-String an eine DLL übergibt bzw. zurück bekommen möchte.
Bei TStrings dürfte das aber doch kein Problem sein oder? Nicht das ich da jetzt etwas mache und auf einmal fliegt es mir um die Flossen.

Zum Beispiel habe ich diese Funktion in meiner Test-DLL
Delphi-Quellcode:
  function AddSLLines(sl: TStrings; const count: Integer): Integer; stdcall;
  var
    ndx: Integer;
    foo: Integer;
  begin
    foo := 0;
    for ndx := 1 to count do
    begin
      sl.Add(Format('Zeile %d', [ndx]));
      Inc(foo);
    end;
    Result := foo;
  end;
und rufe sie dann so in meinem Programm auf:
Delphi-Quellcode:
  TAddSLLines = function(sl: TStrings; count: Integer): Integer; stdcall;

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  dllHandle: THandle = -1;
  AddSLLines: TAddSLLines = NIL;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddSLLines(ListBox1.Items, 10);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  pfad: string;
begin
  pfad := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0))) + 'test.dll';
  dllHandle := LoadLibrary(PAnsiChar(pfad));
  if dllHandle <> 0 then
  begin
    @AddSLLines := GetProcAddress(dllHandle, 'AddSLLines');
  end
  else
  begin
    ShowMessage('blubb');
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeLibrary(dllHandle);
end;
Ist das okay so oder habe ich da einen groben Fehler?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat