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

C# 封装 c dll 发生尝试读取或写入受保护的内存。这通常指示其他内存已损坏

直接上代码:
extern  “C" long_stdcall  NVD_Connect(const char* Addr,int nChn,int nPort,const char* UserName,const char* Passwords,long* plHandle)
参数说明:
Addr:通讯地址 (支持IP地址)          in
nChn:通道索引(0~~最大通道-1)          in
nPort:通讯端口  (默认554)          in
UserName:用户名 (0~256字节)          in
Passwords:密码(0~256字节)          in
plHandle:返回当前连接的操作句柄         out
返回值 
执行成功返回0 错误返回错误码
用C#  封装如下:
[DllImport("****.dll")]
public static extern int devwdm_GetImageBuffer(string Addr,int nChn,int nPort,string  UserName,string Passwords,ref int plHandle);

但是调用的时候总是出现:
于是报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

string  UserName,string Passwords
改为:
stringbuilder UserName,stringbuilder Passwords
也是不行   还是同样的错误  
求解决啊   谢谢 --------------------编程问答-------------------- 指针类型/地址错了 --------------------编程问答-------------------- 什么意思?  long*  对用intptr?
这个好像也试过
貌似也不行啊 --------------------编程问答-------------------- 大侠们  给个封装的函数啊 --------------------编程问答-------------------- char * para1 对应 [MarshalAs(UnmanagedType.LPArray)]byte[] para1
long * para1 对应 ref UInt32 para1
试试! C里面*是指针  所以应该是引用类型的加ref
int _stdcall Ifn_ReadCard_USER(int * ret1, char * ret2, int * ret3, long * ret4, unsigned long * ret5, long * ret6, char * ret7, int * ret8, long * ret9, long * ret10, long * ret11, long * ret12, long * ret13, char * ret14);
//验卡
//输入参数: 无
//输出参数:
//ret1: 卡状态值 int
//ret2: 卡应用号 9BYTE Number
//ret3: 卡类型 int
//ret4: 当前余额 long
//ret5: 设备当前剩余额度 unsigned long
//ret6: 押金 long
//ret7: 卡出售日期 8Byte Number yyyyMMdd
//ret8: 应收租金月份 int
//ret9: 应收租金金额 long
//ret10:可退实际金额 long
//ret11:退卡手续费 long
//ret12:
//ret13:
//ret14:卡片交易记录 300BYTE ASSCII //{交易日期时间[14] + 类型[1](0充值,1消费) + 交易值[6](分) + 终端代号[9]}×10
//ret15:卡终止日期

[DllImport("sztapp.dll", EntryPoint = "Ifn_ReadCard_USER", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern int Ifn_ReadCard_USER(ref int ret1, [MarshalAs(UnmanagedType.LPArray)]byte[] ret2, ref int ret3, ref UInt32 ret4, ref UInt32 ret5, ref UInt32 ret6, [MarshalAs(UnmanagedType.LPArray)]byte[] ret7, ref int ret8, ref UInt32 ret9, ref UInt32 ret10, ref UInt32 ret11, ref UInt32 ret12, ref UInt32 ret13, [MarshalAs(UnmanagedType.LPArray)]byte[] ret14); --------------------编程问答-------------------- 按照上面的办法试了   还是不行啊   错误依旧  
求大神帮助封装。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,