读书人

C回调函数转换成C#该如何处理

发布时间: 2012-09-02 21:00:34 作者: rapoo

C回调函数转换成C#

C/C++ code
typedef bool(__stdcall * TDevicelist_Callback)(Device_set * aset) ;typedef  struct tagDevice_set{  Int  id;  Char  _name[32];  Char   username[32];  Char   userpass[16];  Char   ip [16];  Uint   port;  Byte   channel_count;  Byte   start_channel;  Byte   device_type;}Device_set;


上述的回调函数如何转换成C#语言的

[解决办法]
把指针用C#中的IntPtr代替,重写
[解决办法]
public static extern int PXNVR_GetDeviceList(uint userid,IntPtr callback);
[解决办法]
应该和C++差不多,参考下这个链接。
http://wenku.baidu.com/view/9f2ef117a216147917112813.html?st=1
[解决办法]
C# code
        //类型定义        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]        internal struct Device_set        {            public int id;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]            public string _name;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]            public string username;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]            public string userpass;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]            public string ip;            public uint port;            public byte channel_count;            public byte start_channel;            public byte device_type;        }        internal delegate bool TDevicelist_Callback(ref Device_set ds);        //DLL导入        [DllImport("DLL名字", CallingConvention = CallingConvention.StdCall)]        internal static extern int PQNVR_GetDeviceList(uint userid, TDevicelist_Callback callback); 

读书人网 >C#

热点推荐