Jetzt komm ich zwar an den String, aber ganz zufrieden bin ich noch nicht.
Das geht:
Delphi-Quellcode:
type
SCARDCONTEXT = ULONG_PTR; // Cardinal
PSCARDCONTEXT = ^SCARDCONTEXT;
LPSCARDCONTEXT = ^SCARDCONTEXT;
TAnsiAry = Array[0..1023] of AnsiChar;
function SCardListReadersA(hContext: SCARDCONTEXT; mszGroups: LPCSTR; out mszReaders: TAnsiAry; out pcchReaders: DWORD): ULONG; stdcall; external 'Winscard.dll';
...
procedure TForm1.Button1Click(Sender: TObject);
var X: Integer;
ret: Cardinal;
Size: DWORD;
Readers: TAnsiAry;
begin
// Größe für Readers holen
Size:=0;
ret:=SCardListReadersA(0, 0, Readers, Size);
Memo1.Lines.Add('Size: '+IntToStr(Size));
if ret=0 then begin
ret:=SCardListReadersA(0, 0, Readers, Size);
if ret=0 then begin
for X:=0 to Size-1 do begin
Memo1.Lines.Add(IntToStr(Ord(Readers[X]))+' = '+Readers[X]);
end;
end;
end;
end;
Das geht nicht:
Delphi-Quellcode:
type
SCARDCONTEXT = ULONG_PTR; // Cardinal
PSCARDCONTEXT = ^SCARDCONTEXT;
LPSCARDCONTEXT = ^SCARDCONTEXT;
TAnsiAry = Array of AnsiChar;
function SCardListReadersA(hContext: SCARDCONTEXT; mszGroups: LPCSTR; out mszReaders: TAnsiAry; out pcchReaders: DWORD): ULONG; stdcall; external 'Winscard.dll';
...
procedure TForm1.Button1Click(Sender: TObject);
var X: Integer;
ret: Cardinal;
Size: DWORD;
Readers: TAnsiAry;
begin
// Größe für Readers holen
Size:=0;
ret:=SCardListReadersA(0, 0, Readers, Size);
Memo1.Lines.Add('Size: '+IntToStr(Size));
if ret=0 then begin
SetLength(Readers, Size);
ret:=SCardListReadersA(0, 0, Readers, Size);
if ret=0 then begin
for X:=Low(Readers) to High(Readers) do begin
Memo1.Lines.Add(IntToStr(Ord(Readers[X]))+' = '+Readers[X]);
end;
end;
SetLength(Readers, 0);
end;
end;
Hat jemand eine Idee, wie man dass mit einem dynamischen Array hinbekommt?
Grüße
Matthias