当前位置:编程学习 > C#/ASP.NET >>

C#调用C++ dll提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

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);

然后就提示:

尝试读取或写入受保护的内存。这通常指示其他内存已损坏。   --------------------编程问答-------------------- [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); --------------------编程问答-------------------- Handled是什么类型,确认是intptr么? --------------------编程问答-------------------- [DllImport("MPlay.dll", EntryPoint = "UserLogin")]
public static extern int UserLogin(out hUser, int userLoginPara);

out hUser    out后面要带数据类型吧? --------------------编程问答-------------------- HUSER  是 HANDLE类型,窗口句柄    刚才Handled这个写错了 --------------------编程问答-------------------- 这种错误一般都是类型不兼容发生的,具体原因观望中 --------------------编程问答--------------------
引用 3 楼 sands510 的回复:
[DllImport("MPlay.dll", EntryPoint = "UserLogin")]
public static extern int UserLogin(out hUser, int userLoginPara);

out hUser    out后面要带数据类型吧?


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

--------------------编程问答-------------------- 调用的时候直接这样吧?
IntPtr hUser = new IntPtr();
UserLogin( hUser , 1); --------------------编程问答-------------------- 这种问题一般都是类型转换的时候发生的,多试一些别的类型,out的也可以用ref试一下
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,