Registriert seit: 16. Jan 2006
18 Beiträge
|
AW: WinSCard.dll
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)
|
|
Zitat
|