Thema: WinSCard.dll

Einzelnen Beitrag anzeigen

Dr.MAD

Registriert seit: 16. Jan 2006
18 Beiträge
 
#2

AW: WinSCard.dll

  Alt 13. Mär 2011, 23:01
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
Matthias
  Mit Zitat antworten Zitat