typedef struct
{
    BYTE sSerialNumber[SERIALNO_LEN];  
    BYTE byAlarmInPortNum;        
    BYTE byAlarmOutPortNum;         
    BYTE byDiskNum;    
    BYTE byDVRType;     
    BYTE byChanNum;     
    BYTE byStartChan;         
    BYTE byAudioChanNum;                
    BYTE byIPChanNum;
BYTE byZeroChanNum;
BYTE byMainProto;
BYTE bySubProto;
    BYTE bySupport;        //,    BYTE bySupport1;        //
    BYTE bySupport2; //
WORD wDevType;              //设备型号
BYTE byMultiStream;//
BYTE byMultiStreamProto;//
    BYTE byRes2[14]; //保留    
}NET_DVR_DEVICEINFO_V30, *LPNET_DVR_DEVICEINFO_V30;NET_DVR_API LONG __stdcall NET_DVR_Login_V30(char *sDVRIP, WORD wDVRPort, char *sUserName, char *sPassword, LPNET_DVR_DEVICEINFO_V30 lpDeviceInfo);//调用代码
NET_DVR_DEVICEINFO_V30 DeviceInfoTmp;
memset(&DeviceInfoTmp,0,sizeof(NET_DVR_DEVICEINFO_V30));

LONG lLoginID = NET_DVR_Login_V30(DeviceIp.GetBuffer(DeviceIp.GetLength()),m_nDevPort, \
m_csUser.GetBuffer(m_csUser.GetLength()),m_csPWD.GetBuffer(m_csPWD.GetLength()),&DeviceInfoTmp);上面是VC的代码,翻译成delphi不知道对不对啊  //设备参数结构体
  LPNET_DVR_DEVICEINFO_V30 = ^NET_DVR_DEVICEINFO_V30;
  NET_DVR_DEVICEINFO_V30 = packed record
    sSerialNumber: array[0..47] of Byte;   //序列号
    byAlarmInPortNum,    //报警输入个数
    byAlarmOutPortNum,   //报警输出个数
    byDiskNum,           //硬盘个数
    byDVRType,           //设备类型
    byChanNum,           //设备模拟通道个数
    byStartChan,         //起始通道号,目前设备通道号从1开始
    byAudioChanNum,      //设备主意通道数
    byIPChanNum,         //设备最大数字通道个数
    byZeroChanNum,       //零通道编码个数
    byMainProto,         //主玛流传输协议类型 0-private 1-rtsp
    bySubProto,          //子玛流传输协议类型 0-private 1-rtsp
    bySupport,           //能力 0-不支持 1-支持
    bySupport1,          //能力扩充 0-不支持 1-支持
    bySupport2: Byte;    //能力扩充 0-不支持 1-支持
    wDevType: Word;      //设备型号
    byMultiStream,       //支持多码流 0-不支持 1-支持
    byMultiStreamProto: Byte;  //多码流是否支持rtsp协议取流,按位表示,0-不支持,1-支持:bit0- 码流3,bit1- 码流4,依次类推
    byRes2: array[0..13] of Byte;    //保留,置0
  end;
//下面是调用代码总是出地址越界,谁能告诉我是哪的错误
procedure TForm1.Button1Click(Sender: TObject);
var lUserID: LongInt;
    DeviceInfo: LPNET_DVR_DEVICEINFO_V30;
begin
  NET_DVR_Init();
  New(DeviceInfo);
  FillChar(DeviceInfo^, SizeOf(NET_DVR_DEVICEINFO_V30), 0);  lUserID := NET_DVR_Login_V30(PChar(edtIP.Text), 8000, PChar('admin'), PChar('12345'), DeviceInfo);
  if lUserID > 0 then
    ShowMessage('login success')
  else
    ShowMessage('login failure');
end;