我是在调用一个视频卡的动态库函数时需要使用一个函数,函数的原型如下所示:
function RegisterStreamDirectReadCallback(StreamDirectReadCallback:TStreamDirectReadCallback;Context:pointer):integer;stdcall;far;其中StreamDirectReadCallBack是一个回调函数,我在是这样声明这个回调函数的:
type
TStreamDirectReadCallback=function(var hannelNum:longint;var DataBuf:pointer;var Length:DWORD;var frameType:integer;context:pointer):integer;stdcall;
我看了这个动态库的说明文档上说只要调用了RegisterStreamDirectReadCallback函数那么该函数回返回StreamDirectReadCallBack的中的hannelNum, DataBuf, length ,我现在想问的是我在程序中应该怎么调用这个函数,还有就是我需不需要重写
StreamDirectReadCallBack函数,然后又怎么获取hannelNum,databuf等一些值?
function RegisterStreamDirectReadCallback(StreamDirectReadCallback:TStreamDirectReadCallback;Context:pointer):integer;stdcall;far;其中StreamDirectReadCallBack是一个回调函数,我在是这样声明这个回调函数的:
type
TStreamDirectReadCallback=function(var hannelNum:longint;var DataBuf:pointer;var Length:DWORD;var frameType:integer;context:pointer):integer;stdcall;
我看了这个动态库的说明文档上说只要调用了RegisterStreamDirectReadCallback函数那么该函数回返回StreamDirectReadCallBack的中的hannelNum, DataBuf, length ,我现在想问的是我在程序中应该怎么调用这个函数,还有就是我需不需要重写
StreamDirectReadCallBack函数,然后又怎么获取hannelNum,databuf等一些值?
数据流准备好时会调用该函数
void *Context 调用回调函数提供的上下文 回调函数说明: STREAM_DIRECT_READ_CALLBACK(ULONG channelNumber , void* DataBuf,DWORD Length, int FrameType, void* context) ULONG channelNumber 通道号
Void *DataBuf 缓冲区地址
DWORD Length 缓冲区长度
int FrameType 缓冲区帧类型
void * context 设备上下文
说明:当启动数据扑获后,StreamDirectReadCallBack 会提供数据流的地址、长度、帧类型 等,用户程序直接处理.
开发包执行你的回调函数后,你可以获取到hannelNum(应该是通道channelNum数?)、数据块DataBuf、数据长度Length、桢类型 frameType等值。
var DataBuf : pointer;
var Length : DWORD;
var frameType : integer;
context : pointer):integer;stdcall;
begin
//这里就可以用那些参数
end;
.....var
pContext: Pointer;
begin
...
RegisterStreamDirectReadCallBack(MyCallback, pContext);
...
end;
type
TStreamDirectReadCallback = function(channelNumber: DWORD; DataBuf: PByte; Length: DWORD; FrameType: Integer; context: PByte): Longint; stdcall;function MyCallBack(channelNumber: DWORD; DataBuf: PByte; Length: DWORD; FrameType: Integer; context: PByte): Integer; stdcall;
begin
//这里写你自己的回调处理函数
......
end;//初始化回调
var
pContext: Pointer;
begin
...
RegisterStreamDirectReadCallBack(MyCallback, pContext);
...
end;