0

C++ で記述された単純な sdk (casmcard.dll) と一緒にスマートカードを持っています。

特定のブロックまたはセクターを読み書きするために、マネージ コード (C#) を介して上記の dll のメソッドを呼び出す必要があります。

casmcard.dll ラッパーが見つかりません。

何か案は?

4

1 に答える 1

1

相互運用性を掘り下げる必要があるようです。COM オブジェクトの場合は、インポートして .net にラッパーを作成させることができます。古い学校の dll 関数の場合は、それらをインポートするだけです。

相互運用性はちょっとした黒魔術なので、マッピングとマーシャリングの型についてググる必要があります。

編集

あなたの関数は次のようになりますか?

CasCLGetSN( IN SCARDHANDLE hCard, OUT LPBYTE pbCSNBuffer, IN DWORD cbCSNBufferSize, OUT LPDWORD pcbCSNLength )

これを試して:

CasCLGetSN(ScardHandle hCard, out IntPtr pbCSNBuffer, UInt32 cbCSNBufferSize, out UInt32 pcbCSNLength)

Marshal.Copy()次に、オーバーロードされたを使用して、pbCSNBuffer の内容を取得する必要があります。また、scardHandle の定義を確認してください。構造体の場合は、宣言してSequential属性を追加します。

于 2012-05-21T17:23:52.147 に答える