c++ 中 
  typedef struct  {
BYTE sSerialNumber[SERIALNO_LEN];  //序列号
BYTE byAlarmInPortNum; //DVR报警输入个数
BYTE byAlarmOutPortNum; //DVR报警输出个数
BYTE byDiskNum; //DVR 硬盘个数
BYTE byDVRType; //DVR类型, 
BYTE byChanNum; //DVR 通道个数
BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1
}NET_DVR_DEVICEINFO, *LPNET_DVR_DEVICEINFO;NET_DVR_Login(char *sDVRIP,WORD wDVRPort,char *sUserName,char *sPassword,LPNET_DVR_DEVICEINFO lpDeviceInfo);
c# 中
 struct  LPNET_DVR_DEVICEINFO
    {
byte[] sSerialNumber;  //序列号
byte byAlarmInPortNum; //DVR报警输入个数
byte byAlarmOutPortNum; //DVR报警输出个数
byte byDiskNum; //DVR 硬盘个数
byte byDVRType; //DVR类型, 
byte byChanNum; //DVR 通道个数
byte byStartChan; //起始通道号,例如DVS-1,DVR - 1
   }  [DllImport("HCNetSDK.dll")]
        static extern  int NET_DVR_Login(string sDVRIP,int wDVRPort,string sUserName,string sPassword,ref LPNET_DVR_DEVICEINFO lpDeviceInfo);
  LPNET_DVR_DEVICEINFO abc = new LPNET_DVR_DEVICEINFO();
           int flag1=NET_DVR_Login("192.0.0.64", 8000, "admin", "12345", ref abc);
使用报错...
内存只读
先把这个解决..问题还不少...

解决方案 »

  1.   

    NET_DVR_API LONG __stdcall NET_DVR_Login(char *sDVRIP,WORD wDVRPort,char *sUserName,char *sPassword,LPNET_DVR_DEVICEINFO lpDeviceInfo);
      

  2.   

    [StructLayout(LayoutKind.Sequential)]
    public struct LPNET_DVR_DEVICEINFO
    {
      [ MarshalAs( UnmanagedType.ByValArray, SizeConst=SERIALNO_LEN )]
      byte[] sSerialNumber;  //序列号
      ....
    }
    试试这个
      

  3.   

    楼主好运气,一般都是DLL有问题!
      

  4.   

    问题 会不会出现在:
    NET_DVR_Login 这个方法里面啊
    因为引用变量 在DLL里被操作了
    而变量的初始化其实是在C#里
    这样导致了 内存只读对C++ 不熟
    我的猜测啊;)----------------
    up
      

  5.   

    看看命名空间是不是打开了using System.Runtime.InteropServices;
    楼主先确定dll是否有问题吧