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这个写错了 --------------------编程问答-------------------- 这种错误一般都是类型不兼容发生的,具体原因观望中 --------------------编程问答--------------------
对,类型就是你的huser对象 类型,这个是带返回的class封送处理
--------------------编程问答-------------------- 调用的时候直接这样吧?
IntPtr hUser = new IntPtr();
UserLogin( hUser , 1); --------------------编程问答-------------------- 这种问题一般都是类型转换的时候发生的,多试一些别的类型,out的也可以用ref试一下
补充:.NET技术 , C#