我在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 ;  

解决方案 »

  1.   

    看样子要求传入的是buf的首地址指针
    那你InputVideoDate(integer(@pdata[0]),datalen);试试呢?
      

  2.   

    另外你检查下从AData里read出到pdata的数据对不对.readbuffer前最好adata.position:=0;
      

  3.   

    long InputVideoDate(long *plDate, long lDataLen); 
    =====
    function InputVideoDate(plDate: PLongInt;lDataLen: LongInt): LongInt; var    
      pData:Array[0..1024] of LongInt;    
      lDataLen:LongInt;    ...
    begin
      ...
      InputVideoDate(@pData[0], lDataLen);
      ...
    end;
      

  4.   

    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 
    InputVideoDate(pData[0],lDataLen);
    end ;  
      

  5.   

    非常感谢各位朋友的帮助!真正体会到csdn社区大家庭的温暖,过两天等硬件部分调试好后,测试一下各位朋友的方法。
        就像楼上朋友所说的,向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;