vcDLL中的函数声明如下:
int ReadStreamData(HANDLE handle,void * buffer,DWORD *size,int * type);
//buffer为缓冲区地址;
  size作为输入参数时是缓冲区buffer的大小;调用函数后,他返回实际的数据长度;总体功能是:开辟size大小的buffer缓冲区,传到函数内,函数体中将向buffer写数据,同时返回实际写入的数据的长度,由size参数传出。Delphi中接口申明:
function ReadStreamData(handle: Thandle,buffer:pointer,var size:longint,var type:integer);具体使用过程如下:
{申明buffer}
buffer:pointer;
size:integer;size:=1024*100;
getmem(buffer,size);//给buffer分配内存;ReadStreamData(handle,buffer,size,type);//给buffer写数据blockwrite(file,buffer,size,num);//将buffer中数据写入文件
========================================
buffer本应该返回由C函数写入的数据(返回的数据应该总是变的,而buffer的地址不变),但是我们通过将buffer写入文件时发现,buffer的数据总是不变的。不知是何原因,望高手赐教!是否因为c的void和Delphi的point类型的指针转换有问题?因为从表现出的现象像是:C函数放数据放的不是地方,而Delphi函数取的数据总是一个内存区域的数据,总算不变。

解决方案 »

  1.   

    function ReadStreamData(handle: Thandle,buffer:pointer,var size:longint,var type:integer): Integer;cdecl; 
    声明。因为你在VC中不是标准声明,
    int WINAPI ReadStreamData(HANDLE handle,void * buffer,DWORD *size,int * type);
      

  2.   

    function ReadStreamData(handle: Thandle,buffer:PByte,var size:longint,var type:integer): Integer;stdcall; 
    声明。因为你在VC中不是标准声明,
    int WINAPI ReadStreamData(HANDLE handle,void * buffer,DWORD *size,int * type);
      

  3.   

    in vc:
      extern "C"  int WINAPI  ReadStreamData(HANDLE handle,void * buffer,DWORD *size,int * type);
      

  4.   

    in delphi:
    function ReadStreamData(handle: Thandle;buffer:pointer;var size:longint;var atype:integer):integer;stdcall;external 'testdll.dll';
    procedure TForm1.Button1Click(Sender: TObject);
    var buffer:pointer;
       size:integer;
       tt:integer;
    begin
       size:=1024*100;
       getmem(buffer,size);//给buffer分配内存;
       ReadStreamData(handle,buffer,size,tt);//给buffer写数据
       edit1.text:=pchar(buffer);
    end;
    in vc: extern "C" __declspec(dllexport) int ReadStreamData(HANDLE handle,void * buffer,DWORD *size,int * type)
    {  char *p;
       p=(char *)buffer;
       strcpy(p,"1234567890abcdefghijk");
       return 0;}测试没问题
    你可能从handle没有读到数据