如何在DLL中传递和返回#0-#255字符串(调用的程序不是DELPHI写的)(100分)

  • 主题发起人 主题发起人 死灰
  • 开始时间 开始时间

死灰

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在DLL中传递和返回#0-#255字符串(调用的程序不是DELPHI写的)
//当遇到#0时候就没了。而且不能返回包含#0的字符串,只能返回#0前面的
function TestString(Str : Pchar):Pchar;stdcall;
Var Md5Str:String;
begin
Result := Pchar(IntToStr(length(Str)));
Result := #97#0#97;
//Result := Pchar(EncodeHEX(Str));
Exit;
end;

用String在不是DELPHI程序里调用。。所得到的数据根本不正确,而且有时候会错误。。
 
#0本来就是PChar和String的结束符
如果你想传递包括#0的串,这种设计方式本来就是错的。
可以传递指针和长度
 
有例子吗?给一个。。。还有返回的数据呢?
 
在uses后面加上
type ArrayofChar=Array of Char;

function test:ArrayofChar ;
var rs:ArrayofChar;
begin
setlength(rs,4);
rs[0]:=#0;
rs[1]:='2';
rs[2]:=#0;
rs[3]:=#13;
Result:=rs;
end;


procedure TForm1.Button1Click(Sender: TObject);
var rs:ArrayofChar;
begin
rs:=test;
rs[1]:=rs[1];//在这里跟踪程序就可以看到了
end;
 
jiang_yun_2005
你的代码不行。。用别的程序调用当遇到0时候就不会传送跟返回了。

程序不是DELPHI写的在调用DELPHI编写的DLL如何传递和返回#0-#255字符串??
这样的DLL应该如何做呢?
 
不管是什么字符串,在DLL中传递的话,最好是用PCHAR(c中是CHAR *),如果字符串没有固定好长度的话,最好后面再加上一个,字符串长度的参数(DWORD类型的)
 
后退
顶部