我做的一个dll文件,调用时传入一个字符串变量(转成PChar类型了),然后从dll中的函数(也是PChar型)获取返回值,但是获取返回值显示的时候是乱码,我想照样显示成字符串,请高手们指点一下

解决方案 »

  1.   

    先问一个问题,你用什么函数转PCHAR的返回值!
      

  2.   

    dll中的函数为:
    function transstr(str1:PChar;str2:PChar):PChar;stdcall;
    var
      returnchar:PChar;
      rstr1,rstr2:string;
      returnstr:string;
    begin
      rstr1:= str1;
      rstr2:=str2;
      returnstr:=rstr1+rstr2;
      returnchar:=StrAlloc(80);
      returnchar:=strpcopy(returnchar,rstr1);
      result:=returnchar;
    end;
      调用的情况如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      chang:PChar;
      strin,strin1:string;
      pc1,pc2:PChar;
    begin
      strin1:='hello';
      strin:='how can i do that';
      pc1:=StrAlloc(80);
      pc1:=strpcopy(pc1,strin);
      pc2:=StrAlloc(80);
      pc2:=strpcopy(pc2,strin1);
      chang:=transstr(pc1,pc2);
      edit1.Text:=chang;
    end;
    返回的是乱码字符,各位大大帮帮忙呀
      

  3.   

    你的transstr函数想实现什么功能?绕了半天result:=str1
      

  4.   

    你上面所有的代码等于这一句 edit1.Text:=strin
      

  5.   

    这里主要是说明过程,也就是说我要传给dll一个字符串变量,经过处理后返回处理后的字符串
      

  6.   

    这里有个问题:你用StrAlloc申请内存,使用完后还要释放,不然会内存泄漏。你的transstr函数申请了内存没有释放,而且返回值使用的内存是在dll里申请的,这样很不妥。说说你想实现的功能,我帮你写一个例子
      

  7.   

    功能:在dll里写一个取数据库数据的函数,查询的条件由外部传入,而后传出查询结果,结果可以是字符串或是结果集。
      

  8.   

    呵呵,你的功能太大!
    写一个传递字符的例子吧dll函数
    procedure PassChar(pDemo1,pDemo2,pRet:Pchar);stdcall;
    var
        Str1,Str2,StrRet:String;
    begin
        Str1:=StrPas(pDemo1);
        Str2:=StrPas(pDemo2);
        StrRet:=Format('%s %s',[Str1,Str2]);
        StrPCopy(pRet,StrRet);
    end;
    调用procedure TForm1.Button2Click(Sender: TObject);
    var
        pDemo1,pDemo2,pRet:Pchar;
    begin
        pDemo1:=StrAlloc(80);
        pDemo2:=StrAlloc(80);
        pRet:=StrAlloc(80);    StrCopy(pDemo1,'hello!');
        StrCopy(pDemo2,'how can i do that');
        PassChar(pDemo1,pDemo2,pRet);    edit1.Text:=StrPas(pRet);    StrDispose(pDemo1);
        StrDispose(pDemo2);
        StrDispose(pRet);
    end;
      

  9.   

    我用delphi6,运行时,报错是:‘access violation at 0x77f96b9f:write of address 0x00030ffc ’写地址错误,不知道怎么搞的