int __stdcall M100_ReadMagcardDecode(HANDLE ComHandle, BYTE _track, DWORD *_DataLen,BYTE _BlockData[]);

解决方案 »

  1.   

    参数大约这样:public static int  M100_ReadMagcardDecode(IntPtr ComHandle, byte _track, uint _DataLen[], byte _BlockData[]);
      

  2.   

    public static extern IntPtr M100_ReadMagcardDecode(IntPtr ComHandle, Byte _track, IntPtr _DataLen, Byte[] _BlockData);
      

  3.   


     Byte[]   _BlockData主要就是这个参数,这样不行,在网上查了下,用[MarshalAs(UnmanagedType.LPArray)]   Byte[] blockData也不行
      

  4.   

    int __stdcall M100_ReadMagcardDecode(HANDLE ComHandle, BYTE _track, DWORD *_DataLen,BYTE _BlockData[]);改成
    int WINAPI M100_ReadMagcardDecode(HANDLE ComHandle, BYTE _track, DWORD *_DataLen,BYTE _BlockData[]);
    试试
      

  5.   

    还有 DWORD* _DataLen 为啥不用DWORD_DataLen? 问什么用指针?
      

  6.   

    可以看一下C++/CLI 的数组封送处理
    http://blog.csdn.net/shenyc/article/details/3092170
      

  7.   

    发的是C++封装的dll,我是要用C#调用的,C#没有 DWORD这些啊。。 DWORD *我在网上查了下,用ref UIntBYTE _BlockData[] 不知道怎么调用了。。
      

  8.   


    在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);//打开连接(调用)
      

  9.   

    对于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);
      

  10.   


    谢谢,已经好了,public static extern int M100_ReadMagcardDecode(IntPtr handle, byte _track, ref UInt32 _DataLen, [MarshalAs(UnmanagedType.LPArray)]   byte[] blockData);之前报错是在调用的时候没有给byte[] 声明长度;还是要感谢你的帮忙