函 數: BOOL NET_DVR_GetPlayBackOsdTime(LONG lPlayHandle, LPNET_DVR_TIME lpOsdTime)
參 數: [in]lPlayHandle
[out]lpOsdTime
播放句柄,NET_DVR_PlayBackByName 或
NET_DVR_PlayBackByTime_V40 的回傳值
獲取的OSD 時間的指標
以上是海康的說明書對這個函式的說明,以下是delphi 的函式。請問一下 var lpOsdTime: NET_DVR_TIME ,我應該怎么寫?
function NET_DVR_GetPlayBackOsdTime(lPlayHandle: LongInt;
var lpOsdTime: NET_DVR_TIME): BOOL ;stdcall;external 'HCNetSDK.dll'
uj5u.com熱心網友回復:
type
NET_DVR_TIME = record
dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond: Cardinal;
end;
LPNET_DVR_TIME = ^NET_DVR_TIME;
function NET_DVR_GetPlayBackOsdTime(lPlayHandle: LongInt;
lpOsdTime: LPNET_DVR_TIME): Boolean; stdcall; external 'HCNetSDK.dll';
uj5u.com熱心網友回復:
如果引數lpOsdTime不允許為空指標,使用var引數更恰當,當然直接用指標也可以。使用變參的話,傳入NET_DVR_TIME型別變數既可。uj5u.com熱心網友回復:
function NET_DVR_GetPlayBackOsdTime(lPlayHandle: LongInt;
lpOsdTime: LPNET_DVR_TIME): Boolean; stdcall; external 'HCNetSDK.dll';
和
function NET_DVR_GetPlayBackOsdTime(lPlayHandle: LongInt;
var lpOsdTime: NET_DVR_TIME): Boolean; stdcall; external 'HCNetSDK.dll';
在 Delphi 的語法上是完全等效的,不過如二樓所說,后者比前者要好,因為呼叫者可宣告為區域變數,呼叫回傳后自動釋放,對記憶體效率要高一些,而且也相對安全。
uj5u.com熱心網友回復:
//采用第一種方式,主要是考慮到保持函式的定義與c函式的定義一致, 使用方式如下:
var
PlayHandle: LongInt;
OsdTime: NET_DVR_TIME;
Rst: Boolean;
begin
Rst := NET_DVR_GetPlayBackOsdTime(PlayHandle, @OsdTime); //第一種方式
//Rst := NET_DVR_GetPlayBackOsdTime(PlayHandle, OsdTime); //第二種方式
end;
//其實兩種方式是等效的,都是傳OsdTime的地址。
//呼叫程序中不存在記憶體需要釋放的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/37827.html
標籤:VCL組件開發及應用
上一篇:初學者,謝謝
