DWORD  WINAPI  Get_Data(BYTE* pBuf, DWORD* wlen);  //一个 dll 文件里时面的函数function Get_Data(pBuf:PByte;wlen:DWORD):DWORD;external 'try.dll';  //转为 delphi ?
DWORD WINAPI ScreenThread(LPVOID lpParam)
{
  DWORD S;
  BYTE* pBuf;
  DWORD dwLen;

  pBuf = new BYTE[65000];
  S = Get_data(pBuf, &dwLen);
}
转为 delphi  ?procedure TForm1.btn1Click(Sender: TObject);
var
  s:DWORD;
  pBuf:pByte;
  dwLen:DWORD;
begin
    GetMem(pBuf,65000);
    s := Get_data(pBuf,dwLen);
    freemem(pbuf)
end;

解决方案 »

  1.   


    function   Get_Data(pBuf:PByte;Pwlen:PDWORD):DWORD;external   'try.dll';     //转为   delphi   wlen:PDWORD要用指针procedure   TForm1.btn1Click(Sender:   TObject); 
    var 
        s:DWORD; 
        pBuf:pByte; 
        dwLen:DWORD; 
    begin 
            GetMem(pBuf,65000); 
            s   :=   Get_data(pBuf,@dwLen); //传指针
            freemem(pbuf) 
    end; 或者
    function   Get_Data(pBuf:PByte;var wlen:DWORD):DWORD;external   'try.dll'; //用varprocedure   TForm1.btn1Click(Sender:   TObject); 
    var 
        s:DWORD; 
        pBuf:pByte; 
        dwLen:DWORD; 
    begin 
            GetMem(pBuf,65000); 
            s   :=   Get_data(pBuf,dwLen); 
            freemem(pbuf) 
    end;  
      

  2.   

    procedure   TForm1.btn1Click(Sender:   TObject); 
    var 
        s:DWORD; 
        pBuf:pByte; 
        dwLen:DWORD; 
        memory:TMemoryStream;
    begin 
            GetMem(pBuf,65000);
            memory:=memory:TMemoryStream;
            s   :=   Get_data(pBuf,dwLen); 
            memory.Write(pBuf^, dwLen);    //把读出来的数据写进内存流,这样写有错吗?
            freeandnil(memory);
            freemem(pbuf) 
    end;  
      

  3.   

    typedef DWORD (CALLBACK* NETWORK_CALLBACK)(DWORD dwmsg PVOID pBuf, DWORD dwLen, BOOL beand);这句将如何译成 delphi ?
      

  4.   

      memory.Write(pBuf^,   dwLen);         //把读出来的数据写进内存流,这样写有错吗? 
    是这样的typedef   DWORD   (CALLBACK*   NETWORK_CALLBACK)(DWORD   dwmsg   PVOID   pBuf,   DWORD   dwLen,   BOOL   beand); 这句将如何译成   delphi   ?type   NETWORK_CALLBACK  = procedure( dwmsg:DWORD;pBuf:Pointer;  dwLen: DWORD ;   beand:LongBOOL);
      

  5.   


    DWORD CALLBACK MyCallback(DWORD dwmsg, PVOID pBuf, DWORD dwLen, BOOL bbeand)最后:此句又如何译呢?解决问题马上结贴,谢谢了!
      

  6.   

    这个和type       NETWORK_CALLBACK     =   procedure(   dwmsg:DWORD;pBuf:Pointer;     dwLen:   DWORD   ;       beand:LongBOOL);是配合使用的
    它们的参数一样,type 是定义一种函数类型这是函数的实现
    DWORD   CALLBACK   MyCallback(DWORD   dwmsg,   PVOID   pBuf,   DWORD   dwLen,   BOOL   bbeand) =====》procedure MyCallback(dwmsg:DWORD;pBuf:Pointer; dwLen:DWORD  ;  bbeand:LongBOOL);