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#