Я подозреваю, что вопрос «что такое правильная подпись для SCardEstablishContext в 64-битном проекте?»
Сигнатура C WinAPI выглядит следующим образом:
LONG WINAPI SCardEstablishContext(
__in DWORD dwScope,
__in LPCVOID pvReserved1,
__in LPCVOID pvReserved2,
__out LPSCARDCONTEXT phContext
);
Типы указателей ("LP ...") должны быть IntPtr
, а типы LONG / DWORD должны соответствовать Integer
- это будет правильно для вызова WinAPI в 32-разрядном или 64-разрядном режиме.строить.(В некоторых случаях желательно указать тип управляемой структуры вместо из IntPtr
и позволить .NET-совместимости / pinvoke автоматически упорядочить все.)
pinvoke.net иногда полезен - см. pinvoke.net: SCardEstablishConnection и * обратите внимание, что сигнатура VB.NET вверху неправильна - но необходимо соблюдать осторожность, поскольку определения иногданеверный и / или неполный; -)
Правильная сигнатура pinvoke для непрозрачного значения контекста:
<DllImport("winscard.dll", SetLastError:=True)>
Public Shared Function SCardEstablishContext(
dwScope as Integer,
pvReserved1 as IntPtr,
pvReserved2 as IntPtr,
<out>() phContext as IntPtr) As Integer
End Function
Счастливое кодирование.