C++中的函数为
int WINAPI ecwOpenCallback( ECW_CALLBACK fCallback, const char *szSvrIP=NULL, long nPort = 7901, const char *szAppName=NULL);
回调函数声明如下
typedef long (__stdcall *ECW_CALLBACK)(WORD wEvent, WORD wIndex,const LPECWATCHDATA lpecwData);
LPECWATCHDATA的定义为
typedef struct { WORD nState; //状态 WORD nIdx; //索引 WORD wDataCnt; //数据(lpData)项数 char szTime[20]; //时间 char* lpIDString; //设备号码 char* lpNameString; //设备/用户名称 char* lpData[8]; }ECWATCHDATA,*LPECWATCHDATA;
本人在C#中该怎么写?
解决方案
10
C#中可以用委托来实现
参考http://blog.csdn.net/songjinshi/article/details/8153635
http://blog.csdn.net/iamherego/article/details/50458984
参考http://blog.csdn.net/songjinshi/article/details/8153635
http://blog.csdn.net/iamherego/article/details/50458984
10
在c++/c中是回调,在c#中 对应的是委托
根据c++定义的类型对应定义 就可以了
根据c++定义的类型对应定义 就可以了
80
再帮你把结构体用C#定义出来吧
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, CharSet=System.Runtime.InteropServices.CharSet.Ansi)] public struct ECWATCHDATA { /// WORD->unsigned short public ushort nState; /// WORD->unsigned short public ushort nIdx; /// WORD->unsigned short public ushort wDataCnt; /// char[20] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=20)] public string szTime; /// char* public System.IntPtr lpIDString; /// char* public System.IntPtr lpNameString; /// char*[8] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst=8, ArraySubType=System.Runtime.InteropServices.UnmanagedType.SysUInt)] public System.IntPtr[] lpData; }