直接上代码:
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
也是不行   还是同样的错误  
求解决啊   谢谢

解决方案 »

  1.   

    什么意思?  long*  对用intptr?
    这个好像也试过
    貌似也不行啊
      

  2.   

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