我有一个智能卡和一个用 C++ (casmcard.dll) 编写的简单 sdk。
我需要通过托管代码(C#)专门调用上述dll中的一些方法来读写一些特定的块或扇区。
找不到 casmcard.dll 包装器。
有任何想法吗?
听起来您需要深入研究互操作性。如果它是 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
属性添加到它。