我有一张智能卡,一个用C ++编写的简单sdk(casmcard.dll)。
我需要通过托管代码(C#)调用上面的dll中的一些方法来专门读取和写入一些特定的块或扇区。
找不到casmcard.dll包装。
有什么想法吗?
答案 0 :(得分:1)
听起来你需要深入了解互操作。如果它是一个COM对象,你可以导入它&让.net为你创建包装器。如果它是旧学校dll功能,那么你只需要导入它们。
Interop是一种黑色艺术,所以你需要谷歌周围的地图和&编组类型。
修改强>
所以你的功能看起来像?
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
属性。