NFC ACR122Uを購入しました。 デルファイ7にサンプルが付属しています。デルファイNFC ACR122U-A9接続エラー
私はdelphi XE8を使用していて、サンプルを32ビット/ win 8.1にコンパイルしています。
apijとサンプルプロジェクト関数をdelphi Xe8に適応させ、PcharをPAnsiCharに置き換え、CharをAnsiCharに置き換えて正しい変更を行いました。
私は8つのネイティブドライバを使用していますが、メーカーのドライブはありません。
私は、デバイスを初期化して、正しくデバイス名を取得することができます:上記の手順は非常にうまく機能
procedure TfrmDevProg.btnInitClick(Sender: TObject);
var index: integer;
begin
//Establish context
retCode := SCardEstablishContext(SCARD_SCOPE_USER,
nil,
nil,
@hContext);
if retCode <> SCARD_S_SUCCESS then begin
displayout(GetScardErrMsg(retcode),2);
Exit;
end ;
//List PC/SC readers installed in the system
BufferLen := MAX_BUFFER_LEN;
retCode := SCardListReadersA(hContext,
nil,
@Buffer,
@BufferLen);
if retCode <> SCARD_S_SUCCESS then begin
DisplayOut(getscarderrmsg(retCode),2);
Exit;
end;
btnInit.Enabled := false;
btnConnect.Enabled := true;
LoadListToControl(cbReader,@buffer,bufferLen);
// Look for ACR128 PICC and make it the default reader in the combobox
for index := 0 to cbReader.Items.Count-1 do begin
cbReader.ItemIndex := index;
if AnsiPos('ACR122U PICC', cbReader.Text) > 0 then
Exit;
end;
cbReader.ItemIndex := 0;
end;
。次に、私はデバイスに接続するには、次のコードを使用します。
ここprocedure TfrmDevProg.btnConnectClick(Sender: TObject);
begin
//Connect to reader using a shared connection
retCode := SCardConnectA(hContext,
PAnsiChar(cbReader.Text),
SCARD_SHARE_SHARED,
SCARD_PROTOCOL_T0 or SCARD_PROTOCOL_T1,
@hCard,
@dwActProtocol);
if retcode <> SCARD_S_SUCCESS then begin
displayout(GetScardErrMsg(retcode),2)
end
else begin
displayout('Successful connection to ' + cbReader.Text, 1)
end;
end;
、私はSCardConnectAからエラーを取得しています:「指定されたリーダーの名前が認識されません。」 retcode varは-2146435063です。ここで
は、私はそれを買ったときにDVDからコピーAPIのスニペットコードは、デバイスに送信されます。///////////////////////////////////////////////////////////////////////////////
// Imported functions from Winscard.dll (WIN32 API)
///////////////////////////////////////////////////////////////////////////////
Function SCardEstablishContext(dwscope :DWORD;
pvReserved1: LPCVOID;
pvReserved2: LPCVOID;
phContext :LPSCARDCONTEXT):LONG; stdcall; external 'Winscard.dll';
Function SCardReleaseContext(hContext:SCARDCONTEXT):LONG; stdcall; external 'Winscard.dll';
Function SCardListReadersA(hContext : SCARDCONTEXT;
mszGroups:LPCSTR;
szReaders:LPSTR;
pcchReaders:LPDWORD):LONG; stdcall; external 'Winscard.dll';
//Note : ScardConnectA is for non-UNICODE characters which is only one byte.
// For UNICODE characters it is SCardConnectW. Special processing is
// required for UNICODE. Be careful!
Function SCardConnectA(hContext : SCARDCONTEXT;
szReaders:LPSTR;
dwShareMode : DWORD;
dwPreferredProtocols : DWORD;
phCard : LPSCARDHANDLE;
pdwActiveProtocols:LPDWORD):LONG; stdcall; external 'Winscard.dll';
は、私は、デバイスをテストするためにmannufacturerサイトからバイナリアプリをダウンロードし、すべてがうまく動作します。しかし、私はそれが私のDelphiアプリケーションで動作する必要があります。
助けてください。
へ 修正は、これらを試してみてください: 'RETCODE:= SCardConnectA(hContext、 PAnsiChar(AnsiStringの(cbReader.Text))、 SCARD_SHARE_SHARED、 SCARD_PROTOCOL_T0またはSCARD_PROTOCOL_T1、 @hCard、 @dwActProtocol);' – Fritzw
非常にうまく動作します。どうもありがとう。 –
@Fritzw、それを答えに展開できますか? – Johan