本文选自当初开发项目时的部分代码。
c++函数原型
extern WINSCARDAPI LONG WINAPI
SCardEstablishContext(
_In_ DWORD dwScope,
_Reserved_ LPCVOID pvReserved1,
_Reserved_ LPCVOID pvReserved2,
_Out_ LPSCARDCONTEXT phContext);
c#定义
[DllImport("winscard.dll", EntryPoint = "SCardEstablishContext", CallingConvention = CallingConvention.Winapi)]
public static extern Int32 SCardEstablishContext([In] Int32 dwScope, [In] IntPtr pvReserved1, [In] IntPtr pvReserved2, [In, Out] ref IntPtr phContext);
c++函数原型
SCardListReadersA(
_In_ SCARDCONTEXT hContext,
_In_opt_ LPCSTR mszGroups,
_When_(_Old_(*pcchReaders) == SCARD_AUTOALLOCATE, _At_((LPSTR*)mszReaders, _Outptr_result_buffer_maybenull_(*pcchReaders) _At_(*_Curr_, _Post_z_ _Post_ _NullNull_terminated_)))
_When_(_Old_(*pcchReaders) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*pcchReaders) _Post_ _NullNull_terminated_)
LPSTR mszReaders,
_Inout_ LPDWORD pcchReaders);
c#定义
[DllImport("winscard.dll", EntryPoint = "SCardListReaders", CallingConvention = CallingConvention.Winapi)]
public static extern Int32 SCardListReaders([In] IntPtr hContext, [In] byte[] mszGroups, [Out] byte[] mszReaders, [In, Out] ref int pcchReaders);
使用
IntPtr hReader = new IntPtr();
rc = SCardEstablishContext(0, IntPtr.Zero, IntPtr.Zero, ref hReader);
int pcchReaders = 2048;
byte[] response = new byte[pcchReaders ];
rc = SCardListReaders(hReader, null, response, ref pcchReaders);