お世話になります。
Pasoriの操作で困っています。
下記問題、どうすれば回避できるでしょうか。
前提となる環境
- Visual Studio 2015
- Visual Basic
- .NETFramework 4.6
- PaSoRi(RC-S380)
- 使用するライブラリ:WinSCard.dll
やりたいこと
一定間隔のループ処理の中で、カードがpasoriにかざされたら
そのIDを取得し、IDをキーとしていろいろ処理をしたい。
問題の箇所
SCardGetStatusChangeでエラーが発生する。
エラーの内容
マネージ デバッグ アシスタント 'PInvokeStackImbalance' が 'xxxxx.exe' で問題を検出しました。
追加情報:PInvoke 関数 'xxxxx.WinSCard+WinSCardWrapper::SCardGetStatusChange' がスタックを不安定にしています。
PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。
呼び出し規約、および PInvoke シグネチャのパラメーターがターゲットのアンマネージ シグネチャに一致していることを確認してください。
エラー発生時のコード
■呼び出し元
VB
1Dim URtn As UInteger = WinSCardWrapper.SCardGetStatusChange(Me.hContext, -1, readerState, 1)
■定義側
VB
1 <DllImport("winscard.dll")> 2 Public Shared Function SCardGetStatusChange(ByVal hContext As IntPtr, 3 ByVal dwTimeout As Integer, 4 ByVal rgReaderStates As SCARD_READERSTATE, 5 ByVal cReaders As Integer) As UInteger 6 End Function
やってみたが解決しなかったこと
VB
1<DllImport("winscard.dll")> 2 3 ↓ 下のようにCallingConventionのパラメータを追加 4 5<DllImport("winscard.dll", CallingConvention:=CallingConvention.StdCall)>
その他
- CallingConventionの値をどの値にしてもエラーが発生してしまいます。
- ちなみにFastCallを指定した時は下記エラーが発生してしまいます。
System.TypeLoadException: 無効なアンマネージ呼び出し規約です。
stdcall、cdecl または thiscall のいずれかでなければなりません。
以上よろしくお願い致します。