C#调用dll,出现“尝试读取或写入受保护的内存,这通常指示其他内存已损坏".请高手帮忙!

ws54 2007-07-03 12:59:28
dll中的原结构是
typedef struct
{
UCHAR basicinfosec;//基础信息扇区
UCHAR publicexchangesec;//公共交换信息扇区
UCHAR WorkSec[13];//用于特定用途的扇区使用信息
} SEC_USED_INFO; //使用扇区信息
函数是
int GetLicInfo(LPSTR CommPassword,LPSTR UserPassword,UCHAR *SysCardNo,SEC_USED_INFO &sec_used_status)

我在c#中是这样定义的
结构体
public struct SEC_USED_INFO
{
public Byte basicinfosec;//基础信息扇区
public Byte publicexchangesec;//公共交换信息扇区
public Byte[] WorkSec;//用于特定用途的扇区使用信息
}
函数
[DllImport("a.dll", EntryPoint = "GetInfo", CharSet = CharSet.Ansi)]
public static extern int GetInfo([MarshalAs(UnmanagedType.LPStr)] string CommPassword, [MarshalAs(UnmanagedType.LPStr)] out string UserPassword, out int SysCardNo, out SEC_USED_INFO sec_used_status);

调试时,老是出现"尝试读取或写入受保护的内存,这通常指示其他内存已损坏";用断点调试看出此函数前两个参数没有返回值,后面两个参数有返回!
请高手指点一二,急死了!

...全文
621 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyfer 2008-10-15
  • 打赏
  • 举报
回复
自己都吃到苦了还不共享方法...楼主..
IT_007 2008-09-18
  • 打赏
  • 举报
回复
靠,都这么自私,解决了也不说下解决方法,BS
bdzm 2008-08-21
  • 打赏
  • 举报
回复
怎么解决的,我现在也遇到了这个问题
ws54 2007-07-03
  • 打赏
  • 举报
回复
解决了!
谢谢楼上的朋友们!
ws54 2007-07-03
  • 打赏
  • 举报
回复
把out 改成 ref。

也不行啊!
wzd24 2007-07-03
  • 打赏
  • 举报
回复
把out 改成 ref。
ws54 2007-07-03
  • 打赏
  • 举报
回复
楼上的老兄,还是不行啊!出现下面的错误!
"运行库遇到了错误。此错误的地址为 0x79e812af,在线程 0xb00 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈"

是不是这两个参数有问题
[MarshalAs(UnmanagedType.LPStr)] string CommPassword,
[MarshalAs(UnmanagedType.LPStr)] out string UserPassword
?
我转换错了?
真相重于对错 2007-07-03
  • 打赏
  • 举报
回复
[ StructLayout( LayoutKind.Sequential )]
public class SEC_USED_INFO
{
public Byte basicinfosec;//基础信息扇区
public Byte publicexchangesec;//公共交换信息扇区
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=13 )]

public Byte[] WorkSec;//用于特定用途的扇区使用信息
}
真相重于对错 2007-07-03
  • 打赏
  • 举报
回复
public Byte[] WorkSec;//用于特定用途的扇区使用信息
这里用marshal指定长度信息
紫气东来_999 2007-07-03
  • 打赏
  • 举报
回复
好高深,
帮UP

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧