当前位置:首页 » 多媒体相关

(在线等待,高手请进)delphi调用VC DLL问题,颇有难度,解决了就给分


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函数取的数据总是一个内存区域的数据,总算不变。  
   
 

推荐阅读

  • 4日精选 硬盘专业检测维修软件MHDD用法 [详细内容]
  • 完全操控 DKU-5 [详细内容]
  • 发现错误 Sun微系统重新叙述2003年以来财绩 [详细内容]
  • IBM蠢蠢欲动 欲在网络日志软件市场分一杯羹 [详细内容]
  • 11日精选 随身设备音频格式转换指南 [详细内容]
  • IBM新版Workplace整合网志工具 面向内联网 [详细内容]
  • 纽约时报:IBM购Gluecode公司 坚定开源之路 [详细内容]
  • 网友回答:
    网友:ljmanage

    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);

    网友:zjqyb

    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没有读到数据  
     

    .

    讨论区

    Login