调用C++DLL,回调不触发,该如何解决

调用C++DLL,回调不触发
这是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 怎么会有两个?
改一下名字吧