function retchar( var value: pchar) :boolean;stdcall;
var
begin
  value :='hello';
  result:=true;
end;-----------
我在delphi中调用是好的
var
a: pchar;
getmem(a);
retchar(a);
但是在c++builder里调用时出现乱码。

解决方案 »

  1.   

    c++builder里调用格式
    char *a = new char[10];
    memset(a,0,sizeof(a));
    retchar(a);
    ShowMessage(a);
    --------------
    结果是乱码!头疼呀!
      

  2.   

    换一种方式
    char a[10];
    memset(a,0,sizeof(a));
    retchar(a);
    ShowMessage(a);
    ---------
    仍然是乱码!
      

  3.   

    c++builder里上述两种方式我以前调用VC写的都没有问题,恳请高手指教!
      

  4.   

    楼主代码是错误的..有三种常用写法,可供参考.
    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;
      

  5.   

    楼上,如果用delphi写的dll,要和vb或者vc共用,比如,delphi写的一个程序要调用dll,vb和vc写的也要用到这个dll该如何解决呢?
      

  6.   

    function retchar( var value: pchar) :boolean;stdcall;
    var
    begin
      value :='hello';
      result:=true;
    end;
    首先你的value 是PChar型的不用var,本来就是一个指针
      

  7.   

    确实 不需要用value了... 其实我们只是填充value所指向的空间而已。。
    其地址是不会改变的<最好也不要改变>
      

  8.   

    PChar为指向null结尾的Char字符串的指针,类似于C中的Char*.函数的参数要注意:
    第一、值参数:function Str(BB:String):String;
    第二、引用参数:function Str(var BB:String):String;这样的话就是把地址传过去而不是变量的值。
    第三、常量参数:function Str(const BB:String):String;
    剩下的你自己可以看书了。如果是用DELPHI编写多语言调用的DLL的时候,参数和返回值用PChar型。
      

  9.   

    谢谢,已解决。
    用这个
    function retchar(value:pchar) :boolean;stdcall;
    不要加var就行了。