AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Klasseninstanz an DLL-Funktion übergeben (TStrings)
Thema durchsuchen
Ansicht
Themen-Optionen

Klasseninstanz an DLL-Funktion übergeben (TStrings)

Ein Thema von Sharky · begonnen am 1. Jan 2007 · letzter Beitrag vom 5. Jan 2007
 
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.259 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
 


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 02:07 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 by Thomas Breitkreuz