DLL返回数据长度大于255的问题(100分)

  • 主题发起人 主题发起人 zbird
  • 开始时间 开始时间
Z

zbird

Unregistered / Unconfirmed
GUEST, unregistred user!
做dll接口给其他程序调用(可能是delphi也可能是C++)。
在dll里使用pchar返回数据好象不能大于255吧。
如果要返回大量数据该如何去做?
 
pchar 没有这个限制的!
 
建议像WinApi一样,使用func xxxx(buff: PChar;
bufflen: Integer): Integer;这样的接口。
在外面分配/管理缓冲区,过程里将结果复制到缓冲区,并返回复制长度。
 
就是,把结果放到函数参数里返回,象东兰老大说的一样,应该没有这样的
问题
 
能具体给个这样的API吗?
返回pchar的API挺多的(直接在外面分配好255),但带bufflen的就没太注意了。
现在的问题是数据是从DLL里返回的,在数据返回前是不知道bufflen的。
我不知道该分配多大的空间。
想到一个很烂的方法,将共享数据放到文件里[:(]
 
function GetString(MyStr:Pchar;var Length:integer):integer;StdCall;Export;
Const
L=300;
var
i:integer;
begin
for i:= 0 to Ldo
MyStr:=chr(Random(70)+1);
MyStr[i+1]:=#0;
Length:=301;
Result:=0;
end;
当然了
 
参考:
int GetWindowText(
HWND hWnd, // handle to window or control with text
LPTSTR lpString, // address of buffer for text
int nMaxCount // maximum number of characters to copy
);
还有GetWindowsDirectory也都是这样的API。
 
我觉得也没有长度限制的吧,PCHAR是指针呢,它指向分配空间的首地址
 
int nMaxCount。
这个值看来只能选个比较大的值了[:)]。
 
这个是我调用vc 写的dll,返回的数据是2048
function Onreceive(tempbuf:array of char):Boolean;
cdecl;
external'fcsdll.dll';
 
接受答案了.
 
后退
顶部