本帖最后由 evensky 于 2011-03-02 14:28:08 编辑

解决方案 »

  1.   

    Delphi2010版本将String默认设置为Unicode了,所以不能正常显示。
    建议你尝试把t定义成AnsiString,然后直接强转使用。
      

  2.   

    2010中使用PAnsiChar,因为2010的pchar是unicod的,和delphi7不一样
      

  3.   


    Function Test(pInput:PAnsiChar):PAnsiChar; stdcall;
      var t:AnsiString;
    begin
      t := strPas(pInput);
      showmessage(t);   {此处乱码}
      t := 'test' + t;
      result := PAnsiChar(t);  {返回值依旧乱码}
    end;
    ShowMessage(Test(PAnsiChar('Hello world')));试试 pchar  改成pansichar ,string改成AnsiString。
      

  4.   

    感谢 keeley20 的回复,但是问题依旧。
      

  5.   


    楼上的代码没问题,你把先编译的DLL删掉,改过代码后重新编译一个DLL再试试。
      

  6.   


    用D2010,重新粘贴了代码,运行结果不正确,另,改成PANSIChar后,如果传递Unicode的字符,比如蒙古文,日文,韩文等,可以正确处理吗?
      

  7.   

    以下测试完成可以!DLL:library Project1;uses
      SysUtils,
      Classes,
      Dialogs;{$R *.res}Function Test(pInput:PAnsiChar):PAnsiChar; stdcall;
    var
      t:AnsiString;
    begin
      t := strPas(pInput);
      showmessage(string(t));   {此处乱码}
      t := 'test' + t;
      result := PAnsiChar(t);  {返回值依旧乱码}
    end;exports
      Test;begin
    end.APP:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      Function Test(pInput:PAnsiChar):PAnsiChar; stdcall;external 'Test.dll';
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      Test('消息');
    end;end.
      

  8.   

    已查找到原因了,感谢所有人的帮助
    在调用的时候,必须用Stdcall,即:
    Function Test(pInput:PChar):PChar; stdcall; external 'TestDLL.dll';用PAnsiChar的话也可以,但是显示不了Unicode字符。
    比如 Test("Copyright © 2010") 将弹出:"Copyright ? 2010"D2010可以直接直接用PChar,显示Unicode字符但是在其他语言(VB)中调用的时候,又会出现乱码。无语。
    Private Declare Function Test lib "TestDLL.dll" (byval pInput as string) as string先结贴。