请看下我的代码:
1、定义部分:
    public struct sm_ci_init_param_t
    {
        public uint   m_dwStructSize;//非托管代码中未用到此成员
        public byte   m_bStructVersion;//非托管代码中未用到此成员
        public IntPtr ptr_CIInitCbk;//SM_CI_ReceiveMessageFun_t m_pfunReceiveMessage;回调函数指针
    }    //定义委托
    public delegate sm_ci_error_t SM_CI_InitCbkDelegate(sm_msg_code_t i_nMsgCode,
                                                    IntPtr      i_pInMsgData,//数据指针
                                                    uint i_dwInMsgLen,
                                                    IntPtr o_pOutMsgData,
                                                    uint i_dwMaxOutLen,
                                                    IntPtr o_pnOutLen);    public class CIStackDLL
    {
        [DllImport("cistack.dll")]
        private static extern sm_ci_error_t SM_CI_Init(IntPtr ptr_pInitParam);//sm_ci_init_param_t结构传出指针
        
        //对SM_CI_Init稍做封装
        public sm_ci_error_t CS_SM_CI_Init(SM_CI_InitCbkDelegate DelegateCbk)
        {
            sm_ci_error_t ret = sm_ci_error_t.SM_CI_ERR_UNKNOWN;            sm_ci_init_param_t stInitParam = new sm_ci_init_param_t();
            stInitParam.ptr_CIInitCbk = Marshal.GetFunctionPointerForDelegate(DelegateCbk);
            //stInitParam.ptr_CIInitCbk = IntPtr.Zero;            IntPtr ptr_pInitParam = IntPtr.Zero;
            ptr_pInitParam = Marshal.AllocHGlobal(Marshal.SizeOf(stInitParam));
            if (ptr_pInitParam != IntPtr.Zero)
            {
                Marshal.StructureToPtr(stInitParam, ptr_pInitParam, true);
                ret = SM_CI_Init(ptr_pInitParam);
            }
            Marshal.FreeHGlobal(ptr_pInitParam);
            ptr_pInitParam = IntPtr.Zero;            return ret;
        }
    }2、调用部分:
    sm_ci_error_t ErroCode = sm_ci_error_t.SM_CI_ERR_UNKNOWN;
    CIStackDLL CSCIStack = new CIStackDLL();
    SM_CI_InitCbkDelegate CIInitCbk = new SM_CI_InitCbkDelegate(CIInitReceiveMessageCbk);
    ErroCode = CSCIStack.CS_SM_CI_Init(CIInitCbk);    public static sm_ci_error_t CIInitReceiveMessageCbk(sm_msg_code_t  i_nMsgCode,
                                               IntPtr  i_pInMsgData,//所取数据指针
                                               uint i_dwInMsgLen,//所取数据长度
                                               IntPtr o_pOutMsgData,
                                               uint i_dwMaxOutLen,
                                               IntPtr o_pnOutLen)
    {
         sm_ci_error_t ret = sm_ci_error_t.SM_CI_OK;
         return ret;
    }    我自己看来代码应该没什么问题了,编译能通过,可是执行时每次到需要调用回调时应用程序就会挂掉,还没错误提示程序直接崩溃,不得不寻高人指点我的代码是不是有什么问题。