日期:2014-05-18  浏览次数:20876 次

求救,C++的dll,这个方法用C#调用参数怎么定义?
int __stdcall M100_ReadMagcardDecode(HANDLE ComHandle, BYTE _track, DWORD *_DataLen,BYTE _BlockData[]);

------解决方案--------------------
参数大约这样:

public static int M100_ReadMagcardDecode(IntPtr ComHandle, byte _track, uint _DataLen[], byte _BlockData[]);
------解决方案--------------------
C# code

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

------解决方案--------------------
如果你要改变数组的值必须使用地址传递