H264_DVR_API long CALL_METHOD H264_DVR_Login(char *sDVRIP, unsigned short wDVRPort, char *sUserName, char *sPassword,LPH264_DVR_DEVICEINFO lpDeviceInfo, int *error,SocketStyle socketTyle=TCPSOCKET);
VC
typedef struct _H264_DVR_DEVICEINFO
{
char sSoftWareVersion[64];
char sHardWareVersion[64]; ///< 硬件版本信息
char sEncryptVersion[64]; ///< 加密版本信息
SDK_SYSTEM_TIME tmBuildTime;///< 软件创建时间
char sSerialNumber[64]; ///< 设备序列号
int byChanNum; ///< 视频输入通道数
int iVideoOutChannel; ///< 视频输出通道数
int byAlarmInPortNum; ///< 报警输入通道数
int byAlarmOutPortNum; ///< 报警输出通道数
int iTalkInChannel; ///< 对讲输入通道数
int iTalkOutChannel; ///< 对讲输出通道数
int iExtraChannel; ///< 扩展通道数
int iAudioInChannel; ///< 音频输入通道数
int iCombineSwitch; ///< 组合编码通道分割模式是否支持切换
int iDigChannel; ///<数字通道数
unsigned int uiDeviceRunTime; ///<系统运行时间
SDK_DeviceType deviceTye; ///设备类型
char sHardWare[64]; ///<设备型号
}H264_DVR_DEVICEINFO,*LPH264_DVR_DEVICEINFO;//*** */向设备注册
enum SocketStyle
{
TCPSOCKET=0,
UDPSOCKET,
SOCKETNR
};delphi
function H264_DVR_Login(sDVRIP:pchar;wDVRPort:Word;sUserName,sPassword:pchar; var LPH264_DVR_DEVICEINFO:_H264_DVR_DEVICEINFO;iError:PInteger;Style:PSmallInt)
:LongInt;stdcall;external 报Access Violation at address 6F6E6B6E Read of address 6F6E6B6E 错误
VC
typedef struct _H264_DVR_DEVICEINFO
{
char sSoftWareVersion[64];
char sHardWareVersion[64]; ///< 硬件版本信息
char sEncryptVersion[64]; ///< 加密版本信息
SDK_SYSTEM_TIME tmBuildTime;///< 软件创建时间
char sSerialNumber[64]; ///< 设备序列号
int byChanNum; ///< 视频输入通道数
int iVideoOutChannel; ///< 视频输出通道数
int byAlarmInPortNum; ///< 报警输入通道数
int byAlarmOutPortNum; ///< 报警输出通道数
int iTalkInChannel; ///< 对讲输入通道数
int iTalkOutChannel; ///< 对讲输出通道数
int iExtraChannel; ///< 扩展通道数
int iAudioInChannel; ///< 音频输入通道数
int iCombineSwitch; ///< 组合编码通道分割模式是否支持切换
int iDigChannel; ///<数字通道数
unsigned int uiDeviceRunTime; ///<系统运行时间
SDK_DeviceType deviceTye; ///设备类型
char sHardWare[64]; ///<设备型号
}H264_DVR_DEVICEINFO,*LPH264_DVR_DEVICEINFO;//*** */向设备注册
enum SocketStyle
{
TCPSOCKET=0,
UDPSOCKET,
SOCKETNR
};delphi
function H264_DVR_Login(sDVRIP:pchar;wDVRPort:Word;sUserName,sPassword:pchar; var LPH264_DVR_DEVICEINFO:_H264_DVR_DEVICEINFO;iError:PInteger;Style:PSmallInt)
:LongInt;stdcall;external 报Access Violation at address 6F6E6B6E Read of address 6F6E6B6E 错误
LPH264_DVR_DEVICEINFO lpDeviceInfo, int *error,SocketStyle socketTyle=TCPSOCKET); 中的 CALL_METHOD 定义了#ifndef CALL_METHOD
#define CALL_METHOD __stdcall //__cdecl
#endif
P_LPH264_DVR_DEVICEINFO=^_H264_DVR_DEVICEINFO;function H264_DVR_Login(sDVRIP:pchar;wDVRPort:Word;sUserName,sPassword:pchar; LPH264_DVR_DEVICEINFO:P_LPH264_DVR_DEVICEINFO;iError:PInteger;Style:PSmallInt):LongInt;stdcall;external 'NetSdk.dll' name 'H264_DVR_Login'; 是不是需要这样定义,P_LPH264_DVR_DEVICEINFO这个应该是一个指针
var PH264:P_LPH264_DVR_DEVICEINFO;
GetMem(PH264,Sizeof(P_LPH264_DVR_DEVICEINFO) );
lLogin:=H264_DVR_Login('192.168.0.10',34567,'admin','',PH264,iError,ord(TCPSOCKET));
2.调用修改为如下:
var H264: _LPH264_DVR_DEVICEINFO;
lLogin:=H264_DVR_Login('192.168.0.10',34567,'admin','',@H264,iError,ord(TCPSOCKET));
type
SocketStyle = (TCPSOCKET=0,UDPSOCKET,SOCKETNR);
_H264_DVR_DEVICEINFO = record
...
end;
LPH264_DVR_DEVICEINFO = ^_H264_DVR_DEVICEINFO;
function H264_DVR_Login(sDVRIP:pchar;wDVRPort:Word;sUserName,sPassword:pchar;
lpDeviceInfo:LPH264_DVR_DEVICEINFO;
iError:PInteger;
Style:SocketStyle=TCPSOCKET);var H264: _H264_DVR_DEVICEINFO;
lLogin:=H264_DVR_Login('192.168.0.10',34567,'admin','',@H264,@iError,TCPSOCKET);
2.贴下你翻译的typedef struct _H264_DVR_DEVICEINFO结构
SDK_DeviceType = (SDK_DEVICE_TYPE_DVR, ///< 普通DVR设备
SDK_DEVICE_TYPE_NVS, ///< NVS设备
SDK_DEVICE_TYPE_IPC, ///< IPC设备
SDK_DEVICE_TYPE_HVR, ///<混合dvr
SDK_DEVICE_TYPE_IVR, ///<智能dvr
SDK_DEVICE_TYPE_MVR, ///<车载dvr
SDK_DEVICE_TYPE_NR); SocketStyle =(
TCPSOCKET=0,
UDPSOCKET,
SOCKETNR); /// 系统时间结构
SDK_SYSTEM_TIME = packed record
year:Integer;///< 年。
month:Integer;///< 月,January = 1, February = 2, and so on.
day:Integer;///< 日。
wday:Integer;///< 星期,Sunday = 0, Monday = 1, and so on
hour:Integer;///< 时。
minute:Integer;///< 分。
second:Integer;///< 秒。
isdst:Integer;///< 夏令时标识。
end;_H264_DVR_DEVICEINFO = record
sSoftWareVersion:pchar;
sHardWareVersion:pchar;
sEncryptVersion:pchar;
SDK_SYSTEM_TIME:SDK_SYSTEM_TIME;
sSerialNumber:PChar;
byChanNum,iVideoOutChannel,byAlarmInPortNum,byAlarmOutPortNum,iTalkInChannel,
iTalkOutChannel,iExtraChannel,iAudioInChannel,iCombineSwitch,
iDigChannel:Integer;
uiDeviceRunTime:SDK_SYSTEM_TIME;
deviceTye:SDK_DeviceType;
sHardWare:pchar;
end;
/// 设备类型
enum SDK_DeviceType
{
SDK_DEVICE_TYPE_DVR, ///< 普通DVR设备
SDK_DEVICE_TYPE_NVS, ///< NVS设备
SDK_DEVICE_TYPE_IPC, ///< IPC设备
SDK_DEVICE_TYPE_HVR, ///<混合dvr
SDK_DEVICE_TYPE_IVR, ///<智能dvr
SDK_DEVICE_TYPE_MVR, ///<车载dvr
SDK_DEVICE_TYPE_NR
};
/// 系统时间结构
typedef struct SDK_SYSTEM_TIME{
int year;///< 年。
int month;///< 月,January = 1, February = 2, and so on.
int day;///< 日。
int wday;///< 星期,Sunday = 0, Monday = 1, and so on
int hour;///< 时。
int minute;///< 分。
int second;///< 秒。
int isdst;///< 夏令时标识。
}SDK_SYSTEM_TIME;
按我上面说的第一步修改后还是出问题??将SDK_SYSTEM_TIME后面的packed去掉!!!SDK_SYSTEM_TIME = record
year:Integer;///< 年。
month:Integer;///< 月,January = 1, February = 2, and so on.
day:Integer;///< 日。
wday:Integer;///< 星期,Sunday = 0, Monday = 1, and so on
hour:Integer;///< 时。
minute:Integer;///< 分。
second:Integer;///< 秒。
isdst:Integer;///< 夏令时标识。
end;
Err:integer;
iError:pInteger;
sDVRIP:array[0..14] of char;
sUserName, sPassword :array[0..7] of char;
begin
// GetMem(PH264,Sizeof(P_LPH264_DVR_DEVICEINFO));
StrPCopy(sDVRIP,'192.168.0.10');
StrPCopy(sUserName,'admin');
StrPCopy(sPassword,'');
lLogin:=H264_DVR_Login(sDVRIP,34567,sUserName,sPassword,@H264,@iError,(TCPSOCKET));
修改了,还是报错.....................
var H264: _H264_DVR_DEVICEINFO;
iError:Integer;
begin
lLogin:=H264_DVR_Login('192.168.0.10',34567,'admin','',@H264,@iError,TCPSOCKET);
Err:integer;
iError:Integer;
sDVRIP:array[0..14] of char;
sUserName, sPassword :array[0..7] of char;
begin
// GetMem(PH264,Sizeof(P_LPH264_DVR_DEVICEINFO));
StrPCopy(sDVRIP,'192.168.0.10');
StrPCopy(sUserName,'admin');
StrPCopy(sPassword,'');
lLogin:=H264_DVR_Login(sDVRIP,34567,sUserName,sPassword,@H264,@iError,(TCPSOCKET));
这样定义了
还是报 Access violation at address 00000000,read of address 00000000
H264_DVR_DEVICEINFO = record
sSoftWareVersion:array[0..63] of Char;
sHardWareVersion:array[0..63] of Char;
sEncryptVersion:array[0..63] of Char; SDK_SYSTEM_TIME:SDK_SYSTEM_TIME;
sSerialNumber:array[0..63] of Char;
byChanNum,iVideoOutChannel,byAlarmInPortNum,byAlarmOutPortNum,iTalkInChannel,
iTalkOutChannel,iExtraChannel,iAudioInChannel,iCombineSwitch,
iDigChannel:Integer;
uiDeviceRunTime:Word;
deviceTye:SDK_DeviceType;
sHardWare:array[0..63] of Char;
end;