array of char
sollte nicht
enstsprechen, da Delphi bei array of ohne Range zusätzlich noch eine Längenbeschreibung ablegt.
Delphi-Quellcode:
type
PStrList = ^TStrList;
TStrList =
array [0..0]
of PChar;
var pLst : PStrList;
lst : TStringList;
i : Integer
begin
GetMem(pLst, lst.Count * SizeOf(Pointer));
try
for i := 0
to lst.Count - 1
do
pLst[i] := PChar(lst[i]);
// weil hiner einem Delphi String eigentlich ein PChar liegt
// Call C - Function
func(pLst, lst.Count);
finally
FreeMem(pLst);
// kann nicht in der anderen Dll freigegeben werden, da C einen anderen Speichermanager hat
end;
end;
C-Definition:
Code:
__stdcall void func(char **, int);
procedure func(pStrs : PStrList; iLen : Integer); stdcall;