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"