我在delphi中调用vc做的一个OCX控件,vc中函数原形为:
long InputVideoDate(long *plDate, long lDataLen);
//plData—指向数据缓冲区的指针
//lDateLen—缓冲区的长度。
当我将该控件导入到delphi中后,这个接口函数的参数就变成下面类型: InputVideoDate(var pData:Integer,lDataLen:Integer):Integer;
其中参数plDate由“long *”型变成了“var pData:Integer”按照下面代码,我如何将存入数组pData中数据传给InputVideoDate,请指点一下,谢谢!!!procedure TFormMain.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
pData:Array[]0..1024] of Integer;
lDataLen:Integer;
begin
lDataLen:=AData.Size; //接收流的长度
AData.ReadBuffer(pData,lDataLen);//从流中读出全部数据
//在此处将数组pData的数据传给InputVideoDate
end ;
long InputVideoDate(long *plDate, long lDataLen);
//plData—指向数据缓冲区的指针
//lDateLen—缓冲区的长度。
当我将该控件导入到delphi中后,这个接口函数的参数就变成下面类型: InputVideoDate(var pData:Integer,lDataLen:Integer):Integer;
其中参数plDate由“long *”型变成了“var pData:Integer”按照下面代码,我如何将存入数组pData中数据传给InputVideoDate,请指点一下,谢谢!!!procedure TFormMain.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
pData:Array[]0..1024] of Integer;
lDataLen:Integer;
begin
lDataLen:=AData.Size; //接收流的长度
AData.ReadBuffer(pData,lDataLen);//从流中读出全部数据
//在此处将数组pData的数据传给InputVideoDate
end ;
解决方案 »
- cxGrid
- 动态创建tablesheet和Webbrowser后如何关闭并释放资源
- 》》》非高手勿进——如何在一个程序中用SendMessage点击另外一个程序中的TFlatButton???
- 今天面试题:不用循环打印从1-100
- 请问如何在services程序中调用winexec或者类似的api.
- 如何将ClientDataSet只做临时的数据缓存使用??????
- 如何使函数返回一个const数组(的引用)?
- 谁帮我推荐一本学习数据库的好教材?
- 一个浮点数等于-NAN,是怎么回事?怎么会出现这种值?
- 这是什么?(错误信息)(送分求助!!!!!)
- 关于blob数据从数据库提取出来数据量减少的问题
- 检查到错误类evarianttypecasterror。。在线等
那你InputVideoDate(integer(@pdata[0]),datalen);试试呢?
=====
function InputVideoDate(plDate: PLongInt;lDataLen: LongInt): LongInt; var
pData:Array[0..1024] of LongInt;
lDataLen:LongInt; ...
begin
...
InputVideoDate(@pData[0], lDataLen);
...
end;
ABinding: TIdSocketHandle);
var
pData:Array[0..1024] of Integer;
lDataLen:Integer;
begin
lDataLen:=AData.Size; //接收流的长度
AData.ReadBuffer(pData,lDataLen);//从流中读出全部数据
//在此处将数组pData的数据传给InputVideoDate
InputVideoDate(pData[0],lDataLen);
end ;
就像楼上朋友所说的,向InputVideoDate函数传递的是buff的首地址指针,和数据长度。另外,这个ocx控件中还有函数接口,在vc中的原型为: Snap(BSTR *psImageBuf,long *plBufLength);其作用是获得图像数据缓冲区指针psImageBuf,和缓冲区长度plBufLength,它们都是输出参数,数据缓冲区调用之前开辟。控件被导入delphi后,这个函数变成下面形式: Snap(var psImageBuf:WideString; var plBufLength:Integer);在下面代码中我如何使用这个函数,将缓冲区的首地址和数据长度传给我,然后我将这些数据存成一个jepg图像文件:在c++中代码如下:
void snapDlg::OnSnap()
{
long plBufLength=0; //初始化数据长度
byte *psImageBuf=(byte*)malloc(1024); //开辟数据缓冲区
FILE *hfile=fopen("c:\i.jpeg","wb"); //创建jpeg文件
Snap((BSTR*)&psImageBuf, (long*)plBufLength); //抓捕图像
fwrite(psImageBuf, plBufLength, 1, hfile); //将图像数据写入文件
free(psImageBuf);
psImageBuf=null;
fclose(hfile);
}在delphi中应如何写,请指教!
procedure TFormMain.Button1Click(Sender: TObject);
var
DataBuff: Array(0..1024) of Byte;
BufLen: Integer;
begin
BufLen:=0;
//在这里我如何调用Snap函数获得数据,并写入jpeg文件end;