int Login(out HUSER * hUser,int param)
这是C++ dll里的方法定义
HUSER 是 Handled类型C#导入dll如下:
[DllImport("MPlay.dll", EntryPoint = "UserLogin")]
        public static extern int UserLogin(out IntPtr hUser, int userLoginPara);调用如下:
IntPtr hUser = new IntPtr();
UserLogin(out hUser , 1);然后就提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。  

解决方案 »

  1.   

    [DllImport("MPlay.dll", EntryPoint = "UserLogin")]
    public static extern int UserLogin(out hUser, int userLoginPara);或者[DllImport("MPlay.dll", EntryPoint = "UserLogin")]
    public static extern int UserLogin([in,out]hUser, int userLoginPara);
      

  2.   

    Handled是什么类型,确认是intptr么?
      

  3.   

    [DllImport("MPlay.dll", EntryPoint = "UserLogin")]
    public static extern int UserLogin(out hUser, int userLoginPara);out hUser    out后面要带数据类型吧?
      

  4.   

    HUSER  是 HANDLE类型,窗口句柄    刚才Handled这个写错了
      

  5.   


    对,类型就是你的huser对象 类型,这个是带返回的class封送处理
      

  6.   

    调用的时候直接这样吧?
    IntPtr hUser = new IntPtr();
    UserLogin( hUser , 1);
      

  7.   

    这种问题一般都是类型转换的时候发生的,多试一些别的类型,out的也可以用ref试一下