function retchar( var value: pchar) :boolean;stdcall;
var
begin
value :='hello';
result:=true;
end;-----------
我在delphi中调用是好的
var
a: pchar;
getmem(a);
retchar(a);
但是在c++builder里调用时出现乱码。
var
begin
value :='hello';
result:=true;
end;-----------
我在delphi中调用是好的
var
a: pchar;
getmem(a);
retchar(a);
但是在c++builder里调用时出现乱码。
char *a = new char[10];
memset(a,0,sizeof(a));
retchar(a);
ShowMessage(a);
--------------
结果是乱码!头疼呀!
char a[10];
memset(a,0,sizeof(a));
retchar(a);
ShowMessage(a);
---------
仍然是乱码!
1...........
function retchar( var value: string) :boolean;stdcall;//当然,缺点是需要BORLANDMM.DLL
begin
value :='hello';
result:=true;
end;
2..........必须由调用者分配内存....WINDOWS API常用....
function retchar(value:pchar;bufsize:Integer ) :boolean;stdcall;
begin
StrLCopy(value,'hello',bufsize);
result:=true;
end;
3..........这种方法其实是涉及技术最多的,只是DELPHI把很多东西封得太好,
...简单看来它同传string差不多的...........
function retchar(var value:WideString ) :boolean;stdcall;
begin
value:='hello';
result:=true;
end;
var
begin
value :='hello';
result:=true;
end;
首先你的value 是PChar型的不用var,本来就是一个指针
其地址是不会改变的<最好也不要改变>
第一、值参数:function Str(BB:String):String;
第二、引用参数:function Str(var BB:String):String;这样的话就是把地址传过去而不是变量的值。
第三、常量参数:function Str(const BB:String):String;
剩下的你自己可以看书了。如果是用DELPHI编写多语言调用的DLL的时候,参数和返回值用PChar型。
用这个
function retchar(value:pchar) :boolean;stdcall;
不要加var就行了。