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函数取的数据总是一个内存区域的数据,总算不变。
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函数取的数据总是一个内存区域的数据,总算不变。
解决方案 »
- TEECHART中非线性曲线中已知X坐标,怎么求Y坐标?
- 100分 求一个方案 局域网中客户端上Delphi将文件上传到服务器,并且能下载
- 一个关于Variant和CopyMemory 的问题,标题中很难说明白,进来就知道了.
- fastreport2.5下载
- 请问如何在DATASET中查找,查某个字的内容,看看符合条件的记录存不存在
- 关于update set语句
- 一个SQL的小问题
- 查询最基本问题,很简单。半小时后结帐。
- 新手一个很弱的问题:用DataSource--Table联接的DBGrid中怎么知道结束?
- Delphi7 开发Webservice,客户端TClientDataSet 报Unknown SOAPAction "http://www.borland.c
- ◎◎◎◎◎摩托的一大难题~~
- 一个很苯的问题,请高手教我!
声明。因为你在VC中不是标准声明,
int WINAPI ReadStreamData(HANDLE handle,void * buffer,DWORD *size,int * type);
声明。因为你在VC中不是标准声明,
int WINAPI ReadStreamData(HANDLE handle,void * buffer,DWORD *size,int * type);
extern "C" int WINAPI ReadStreamData(HANDLE handle,void * buffer,DWORD *size,int * type);
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没有读到数据