在delphi7中使用vc编写的一个ocx控件,我要使用它的一个接口函数,把我从网络中通过idudpserver接收的视频数据流传给这个函数进行处理,这个函数的原形是:  long InputVideoDate(long *plDate, long lDataLen); 
  //plData—指向数据缓冲区的指针 
  //lDateLen—缓冲区的长度。  当我将该控件导入到delphi中后,这个接口函数的参数就变成下面类型:  InputVideoDate(var pData:Integer,lDataLen:Integer):Integer; 发现参数pData由“long *plDate”变成了“var pData:Integer”,就不知道如何处理了。 于是我编写代码进行测试,可是当执行到InputVideoDate函数时报错!"access violation at 0x0061efcb: read of address 0x11000825"代码如下:procedure TFormMain.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; 
  ABinding: TIdSocketHandle); 
var  
  pData: integer ;  
  lDataLen:Integer; 
begin 
  lDataLen:=AData.Size;          //接收流的长度 
  AData.ReadBuffer(pData,lDataLen);//从流中读出全部数据 
  InputVideoDate(pData,lDataLen);       //将数据传给InputVideoDate处理 ,(当执行本条代码时报错)
end ; 请高手指点一下,我如何才能正确调用这个接口函数InputVideoDate(var pData:Integer,lDataLen:Integer):Integer;

解决方案 »

  1.   

    试试这样定义
    InputVideoDate(pData:PInteger,lDataLen:Integer):Integer;
    调用的时候这样
    InputVideoDate(@pData,lDataLen);
      

  2.   

    InputVideoDate(var pData:Integer,lDataLen:Integer):Integer;是调用的一个ocx控件的接口函数,不能重新定义。   
      

  3.   

    var
      pData:integer;
      lDataLen:Integer;
      buf:pbyte;
    begin
    lDataLen:=AData.Size;         
    getmem(buf,lDataLen);
    pData:=integer(buf);
    try
       AData.ReadBuffer(buf,lDataLen);   
       InputVideoDate(pData,lDataLen); 
    Finally
       FreeMem(buf);
       end;
    end ;//直接写的,没调试过
      

  4.   

    你手上有那个ocx的源代码么?这句
    long InputVideoDate(long *plDate, long lDataLen);
    既然plData—指向数据缓冲区的指针那为什么要还要long *pldata?这是声明了一个指向整数的指针,应该改成void *pldata或者char *pldata,如果不能改的话可以参照上楼的写法,你那段代码根本就有问题,
    AData.ReadBuffer(pData,lDataLen);//从流中读出全部数据,pdata是整数,有这么写的么?