私はあなたに私を助けるように頼むためにこの投稿を書きました. 私の要件は、c# コンテキストで scard32.dll を使用してスマート カード (sle4428) を読み書きすることです。リーダーは SCM Microsystem の SCR 3310 です。
まず第一に、正しく実行される vb.net コードがあり、データの読み取りと書き込みができます。問題は、c# を使用して同じことをしようとするときです。私の最初の試みは、C# でネイティブ呼び出し "SCardComand" を翻訳することでしたが、失敗しました。2 番目の試みは、VB.net コードから dll を構築し、それを ac# コンテキストで使用することでしたが、それでも失敗します。
そして、私がこの投稿を書いているのは、私がこれ以上アイデアを持っていないからです.
VB.net のネイティブ コールを提供します。
<DllImport("SCARD32", EntryPoint:="SCardComand", SetLastError:=True, CallingConvention:=CallingConvention.Winapi, CharSet:=CharSet.Ansi, ExactSpelling:=True)> _
Public Shared Function SCardComand(ByRef handle As Integer,
<MarshalAs(UnmanagedType.VBByRefStr)> ByRef cmd As String,
ByRef cmdLen As Integer,
<MarshalAs(UnmanagedType.VBByRefStr)> ByRef dataIn As String,
ByRef dataInLen As Integer,
<MarshalAs(UnmanagedType.VBByRefStr)> ByRef dataOut As String,
ByRef dataOutLen As Integer) As Integer
End Function
そしてここで私のC#への翻訳。
[DllImport("SCARD32.DLL")]
static extern UInt32 SCardComand(IntPtr handle,
[MarshalAs(UnmanagedType.LPTStr)] ref String cmd,
IntPtr cmdLen,
[MarshalAs(UnmanagedType.LPTStr)] ref String dataIn,
IntPtr dataInLen,
[MarshalAs(UnmanagedType.LPTStr)] out String dataOut,
IntPtr dataOutLen);
たとえば、このコマンドを c# で実行すると、int Ret = SCardComand(0, "Card,MemVerifyPin,FFFFF", 0,"",0, "", 0);
16384 を取得できますが、これは私にとっては何の意味もありません。
誰かがどのように進むべきかについて考えを持っているなら、お願いします...