求救,C++的dll,这个方法用C#调用参数怎么定义? int __stdcall M100_ReadMagcardDecode(HANDLE ComHandle, BYTE _track, DWORD *_DataLen,BYTE _BlockData[]); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参数大约这样:public static int M100_ReadMagcardDecode(IntPtr ComHandle, byte _track, uint _DataLen[], byte _BlockData[]); public static extern IntPtr M100_ReadMagcardDecode(IntPtr ComHandle, Byte _track, IntPtr _DataLen, Byte[] _BlockData); Byte[] _BlockData主要就是这个参数,这样不行,在网上查了下,用[MarshalAs(UnmanagedType.LPArray)] Byte[] blockData也不行 int __stdcall M100_ReadMagcardDecode(HANDLE ComHandle, BYTE _track, DWORD *_DataLen,BYTE _BlockData[]);改成int WINAPI M100_ReadMagcardDecode(HANDLE ComHandle, BYTE _track, DWORD *_DataLen,BYTE _BlockData[]);试试 还有 DWORD* _DataLen 为啥不用DWORD_DataLen? 问什么用指针? 可以看一下C++/CLI 的数组封送处理http://blog.csdn.net/shenyc/article/details/3092170 发的是C++封装的dll,我是要用C#调用的,C#没有 DWORD这些啊。。 DWORD *我在网上查了下,用ref UIntBYTE _BlockData[] 不知道怎么调用了。。 在web 里这么写 这是以前写过的 也是网上找的,可以实现,lz在自己查查吧。 class DllDynamic:IDisposable//这个类是固定的 { [DllImport("Kernel32.dll")] public static extern int LoadLibrary(string lpFileName); [DllImport("Kernel32.dll")] public static extern bool FreeLibrary(int hModule); [DllImport("Kernel32.dll")] public static extern IntPtr GetProcAddress(int hModule, string lpProcName); #region IDisposable 成员 public void Dispose() { throw new NotImplementedException(); } #endregion }''''''调用 int hLib = DllDynamic.LoadLibrary(path);//应用dll的路径 IntPtr ptr = DllDynamic.GetProcAddress(hLib, "SS_Open_Tcp"); SS_Open_Tcp opentcp = (SS_Open_Tcp Marshal.GetDelegateForFunctionPointer(ptr, typeof(SS_Open_Tcp));//dll里的方法(SS_Open_Tcp)int numtcp = opentcp(sIP, port, delay);//打开连接(调用) 对于C来说 参数 BYTE _BlockData[] 和 BYTE* _BlockData 是一样的,既然 DWORD * 用 ref UInt,那么BYTE _BlockData[] 相应可以使用 ref Byte[] _BlockData用下面的试试public static extern IntPtr M100_ReadMagcardDecode(IntPtr ComHandle, Byte _track, ref UInt _DataLen, ref Byte[] _BlockData); 谢谢,已经好了,public static extern int M100_ReadMagcardDecode(IntPtr handle, byte _track, ref UInt32 _DataLen, [MarshalAs(UnmanagedType.LPArray)] byte[] blockData);之前报错是在调用的时候没有给byte[] 声明长度;还是要感谢你的帮忙 C#高级编程(第7版)这本书怎样?? 线程中访问WEB控件? 怎么在 DataSet 中添加一行? 16位进制问题! 初学求助~~~~~~~~ 紧急求助:问一下C#里面怎么在一个TEXTBOX里显示多种颜色的字体? 有没有研究Rainbow Portal的,来交流一下 500分求救带有界面的Web自定义控件的建立 想学下c#,有些疑惑请指点下 C#在拖放过程中如何处理鼠标悬停? 求教,如何遍历选定的文件夹底下的图片 function调用?
Byte[] _BlockData主要就是这个参数,这样不行,在网上查了下,用[MarshalAs(UnmanagedType.LPArray)] Byte[] blockData也不行
int WINAPI M100_ReadMagcardDecode(HANDLE ComHandle, BYTE _track, DWORD *_DataLen,BYTE _BlockData[]);
试试
http://blog.csdn.net/shenyc/article/details/3092170
在web 里这么写 这是以前写过的 也是网上找的,可以实现,lz在自己查查吧。
class DllDynamic:IDisposable//这个类是固定的
{
[DllImport("Kernel32.dll")]
public static extern int LoadLibrary(string lpFileName); [DllImport("Kernel32.dll")]
public static extern bool FreeLibrary(int hModule); [DllImport("Kernel32.dll")]
public static extern IntPtr GetProcAddress(int hModule, string lpProcName); #region IDisposable 成员 public void Dispose()
{
throw new NotImplementedException();
} #endregion
}''''''
调用
int hLib = DllDynamic.LoadLibrary(path);//应用dll的路径
IntPtr ptr = DllDynamic.GetProcAddress(hLib, "SS_Open_Tcp");
SS_Open_Tcp opentcp = (SS_Open_Tcp Marshal.GetDelegateForFunctionPointer(ptr, typeof(SS_Open_Tcp));//dll里的方法(SS_Open_Tcp)
int numtcp = opentcp(sIP, port, delay);//打开连接(调用)
public static extern IntPtr M100_ReadMagcardDecode(IntPtr ComHandle, Byte _track, ref UInt _DataLen, ref Byte[] _BlockData);
谢谢,已经好了,public static extern int M100_ReadMagcardDecode(IntPtr handle, byte _track, ref UInt32 _DataLen, [MarshalAs(UnmanagedType.LPArray)] byte[] blockData);之前报错是在调用的时候没有给byte[] 声明长度;还是要感谢你的帮忙