(在线等待,高手请进)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函数取的数据总是一个内存区域的数据,总算不变。
推荐阅读
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);
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没有读到数据


讨论区