GUI模式下读取DLL参数为乱码,控制台模式下正常未知参数的字符编码类型 但DEMO文件是这样写的
type
    PtsrServerInfo = ^TtsrServerInfo;
    TtsrServerInfo = packed record
    ServerName      : Array [0..29] of Char;
    WelcomeMessage  : Array [0..255] of Char;
end;DEMO采用的是控制台模式Procedure DoGetServerInfo;
var
  ServerInfo: TtsrServerInfo;
begin
  with ServerInfo do
  begin
    writeln(format('Servername: %s',[Servername]));
    writeln(format('Welcome Message: %s',[WelcomeMessage]));
  end;
end;显示正确中文+英文
============================================在窗口模式(GUI) procedure TForm1.Button2Click(Sender: TObject);
var
    ServerInfo: TtsrServerInfo;
    Si:  string;
begin
   Si  := serverinfo.ServerName  ;
   ShowMessage(si);end;则为乱码...困扰多日....请高人解决

解决方案 »

  1.   

    在窗口模式(GUI)  procedure TForm1.Button2Click(Sender: TObject); 
    var 
        ServerInfo: TtsrServerInfo; 
        Si:  string; 
    begin 
       Si  := strpas(serverinfo.ServerName)  ; 
       ShowMessage(si); end; 
      

  2.   

    -_-:
    我刚才试了一下,发现你的代码并不会显示乱码......var
     str:TtsrServerInfo;
     s:string;
    begin
     str.ServerName:='teset中123';
     s:=strpas(str.ServerName);
     showmessage(s);
    end;这个在d7下也是正常显示的......
      

  3.   

    在定义时使用ServerName      : Array [0..29] of Char; 
    所以需要通过s:=strpas(str.ServerName); 
    才可以提取到实际字符串
      

  4.   

    且动态库传递参数最好使用pchar,
    这样可以在DLL中直接将值传递出去
    乱码可能是DLL中ServerName的“地址”
      

  5.   

    是不是静态引入的DLL函数?如果是的话留意下调用协定是否一致,例如说都是stdcall。不一致的话数据就会乱。