这是C++的定义:
typedef unsigned char HI_U8;
typedef unsigned char HI_UCHAR;
typedef unsigned short HI_U16;
typedef unsigned int HI_U32;
typedef unsigned long HI_ULONG;
typedef unsigned __int64 HI_U64;
typedef char HI_S8;
typedef short HI_S16;
typedef int HI_S32;
typedef long HI_LONG;
typedef long HI_HANDLE;
typedef __int64 HI_S64;
typedef char HI_CHAR;
typedef char* HI_PCHAR;
typedef float HI_FLOAT;
typedef double HI_DOUBLE;
typedef void HI_VOID;
typedef enum hiMD_TYPE_E
{
DATA_MOTION_DETECTION = 0,
DATA_INPUT_ALARM,
DATA_KEEP_ALIVE,
DATA_DEC_STATE,
DATA_ALADIO_ALARM,
DATA_BUTT
}MD_TYPE_E;
typedef LONG (HISDK_APICALL* OnMessageCallBack)(
HI_U32 u32Chn,
MD_TYPE_E eDataType,
HI_U8* pu8Buffer,
HI_U32 u32Length,
HI_VOID* pUserData);
HISDK_API HI_S32 HISDK_APICALL HI_SDK_SetMessageCallBack(HI_HANDLE lHandle, HI_U32 u32Chn, OnMessageCallBack CallBack, HI_VOID *pUserData);
我在C#中这样调用:
public enum MD_TYPE_E
{
DATA_MOTION_DETECTION = 0,
DATA_INPUT_ALARM,
DATA_KEEP_ALIVE,
DATA_DEC_STATE,
DATA_ALADIO_ALARM,
DATA_BUTT
}
public delegate int MessageCallBack(int chn, MD_TYPE_E type, IntPtr areas, int length, IntPtr userData);
[DllImport(@"HISDK.dll")]
public static extern int HI_SDK_SetMessageCallBack(IntPtr handle, int chn, MessageCallBack callback, IntPtr userData);
var result=HISDKInvoker.HI_SDK_SetMessageCallBack(_handle, _handle.ToInt32(), new MessageCallBack(MessageCallBack), this.Handle);//返回0,表示成功
public static int MessageCallBack(int chn, IPCAMERATest2.Core.HISDKInvoker.MD_TYPE_E type, IntPtr areas, int length, IntPtr userData)
{
return 0;
}
但是无论怎样,MessageCallBack回调都不触发,看了下提供的C++DEMO, 是可以触发的,不知道是不是c#中的类型不对还是我的写法有问题?
------解决思路----------------------
MessageCallBack 怎么会有两个?
改一下名字吧