Thema: WinSCard.dll

Einzelnen Beitrag anzeigen

Dr.MAD

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

AW: WinSCard.dll

  Alt 14. Mär 2011, 22:34
Hast recht! Jetzt funktionierts:

Delphi-Quellcode:
SCARDCONTEXT = ULONG_PTR; // Cardinal
  PSCARDCONTEXT = ^SCARDCONTEXT;
  LPSCARDCONTEXT = ^SCARDCONTEXT;

  function SCardListReadersA(hContext: SCARDCONTEXT; mszGroups: LPCSTR; mszReaders: PAnsiChar; pcchReaders: PDWORD): ULONG; stdcall; external 'WinSCard.dll';

...

function GetSmartCardReadersList(var SmartCardReaders: TStringList): Cardinal;
var X: Integer;
    Size: Cardinal;
    AnsiAry: Array of AnsiChar;
    TmpStr: String;
begin
  // Evtl. StringList leeren
  SmartCardReaders.Clear;
  // Größe für Array einlesen
  Result:=SCardListReadersA(0, 0, nil, @Size);
  if (Result=0) and (Size>0) then begin
    // Speicher reservieren
    SetLength(AnsiAry, Size);
    // Reader-Liste als Multi-String (xxxxx+#0+xxxxx+#0+xxxxx+#0+#0) einlesen
    Result:=SCardListReadersA(0, 0, @AnsiAry[0], @Size);
    if Result=0 then begin
      // Multi-String -> StringList
      for X:=Low(AnsiAry) to High(AnsiAry) do begin
        if AnsiAry[X]<>#0 then TmpStr:=TmpStr+AnsiAry[X] else begin
          if TmpStr<>'then SmartCardReaders.Add(TmpStr);
          TmpStr:='';
        end;
      end;
    end;
    // Speicher freigeben
    SetLength(AnsiAry, 0);
  end;
end;
Matthias

Geändert von Dr.MAD (14. Mär 2011 um 22:37 Uhr)
  Mit Zitat antworten Zitat