DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: eschen
今日帖子: 13
在线用户: 43
导航: 论坛 -> Web应用开发 斑竹:bodies  
作者:
男 142857 (142857) ★☆☆☆☆ -
盒子活跃会员
2019/6/13 9:28:58
标题:
求paxcomplier大神解决字符串问题? 浏览:202
加入我的收藏
楼主: 请见附件,包含代码,我用4.2,4.1都是此问题,不知道大神是如何解决的?
此帖子包含附件:142857_201961392858.rar 大小:1,121B
----------------------------------------------
ddddd
作者:
男 142857 (142857) ★☆☆☆☆ -
盒子活跃会员
2019/6/13 10:21:04
1楼: 代码文件:
{$APPTYPE CONSOLE}
program TestPax;

uses
  PaxCompiler,
  PaxProgram,
  IMPORT_Common,
  vcl.dialogs,
  SysUtils;

type
  THandler = class
    procedure DoImportGlobalMembers(Sender: TPaxCompiler);
  end;

procedure THandler.DoImportGlobalMembers(Sender: TPaxCompiler);
begin
Register_Common;
//  Register_Common(Sender);
end;

var
  PaxCompiler1: TPaxCompiler;
  PaxProgram1: TPaxProgram;
  PaxPascalLanguage1: TPaxPascalLanguage;
  Handler: THandler;
  I: Integer;
begin
  Handler := THandler.Create;
  PaxCompiler1 := TPaxCompiler.Create(nil);
  PaxProgram1 := TPaxProgram.Create(nil);
  PaxPascalLanguage1 := TPaxPascalLanguage.Create(nil);

  PaxCompiler1.OnImportGlobalMembers := Handler.DoImportGlobalMembers;
  try
    PaxCompiler1.RegisterLanguage(PaxPascalLanguage1);
   PaxCompiler1.RegisterHeader(0, 'procedure ShowMessage(const Msg: string);', @ShowMessage);
     PaxCompiler1.RegisterHeader(0, 'function IntToStr(Value: Integer): string;', @IntToStr);
//        PaxCompiler1.RegisterHeader(0, 'function UTF8ToString(Value: string): string;', @UTF8ToString);
    PaxCompiler1.AddModule('1', 'Pascal');
    PaxCompiler1.AddCodeFromFile('1', 'script.txt');
    if PaxCompiler1.Compile(PaxProgram1) then
    begin
      PaxProgram1.Run;
    end
    else
    begin
      writeln(PaxCompiler1.ErrorMessage[0]);
      writeln(PaxCompiler1.ErrorLineNumber[0]);
      writeln(PaxCompiler1.ErrorLine[0]);
    end;

    for I:=0 to PaxCompiler1.WarningCount - 1 do
    begin
      writeln(PaxCompiler1.WarningMessage[I]);
      writeln(PaxCompiler1.WarningLineNumber[I]);
      writeln(PaxCompiler1.WarningLine[I]);
    end;

  finally
    PaxCompiler1.Free;
    PaxProgram1.Free;
    PaxPascalLanguage1.Free;
    Handler.Free;
  end;
  writeln('Press any key...');
  Readln;




end.
----------------------------------------------
ddddd
作者:
男 142857 (142857) ★☆☆☆☆ -
盒子活跃会员
2019/6/13 10:21:44
2楼: 脚本文件:怎么不出现乱码?

program Test;
uses SysUtils,classes,Vcl.Dialogs;
var   returncmd:ansistring;
    astrs:TStringlist;
    i:integer;
begin
   astrs:=Tstringlist.create;
   astrs.add('abc0');
   astrs.add('abc1');
   astrs.add('测试2');
   astrs.add('kw3');
    astrs.add('kw4');
        astrs.add('像阿姨给你5');
   astrs.add('zhongguo6');
   showmessage(inttostr(astrs.count));
   for i:=0 to astrs.count-1 do
   begin
   returncmd:=astrs.strings[i];
   showmessage(returncmd);
   end;
   astrs.free;

end.
----------------------------------------------
ddddd
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/6/13 11:15:33
3楼: ansistring=>string
----------------------------------------------
--
作者:
男 142857 (142857) ★☆☆☆☆ -
盒子活跃会员
2019/6/13 16:06:25
4楼: 谢谢bahamut8348 (leonna),总结一下,如果 scripts.txt为utf8格式,会出现乱码,ansistring非英文字符会出现乱码
----------------------------------------------
ddddd
作者:
男 142857 (142857) ★☆☆☆☆ -
盒子活跃会员
2019/6/13 16:29:30
5楼: 改脚本文件,试着看下字符串长度,发现paxcomplier是是不是把string当widestring来使用的,和delphi调用完全一致,问题是我的类为了兼容d7都是ansistring,怎么进行转换呢?

program Test;
uses SysUtils,classes,Vcl.Dialogs;
var   returncmd:string;
    astrs:TStringlist;
    i:integer;
    ansi:ansistring;
begin
   astrs:=Tstringlist.create;
      astrs.add('测试0');
   astrs.add('abc1');
   astrs.add('abc2');
   astrs.add('测试3');
   astrs.add('kw4');
    astrs.add('kw5');
        astrs.add('像阿姨给你6');
   astrs.add('zhongguo7');
   showmessage(inttostr(astrs.count));
   for i:=0 to astrs.count-1 do
   begin
   returncmd:=astrs.strings[i]+' len:'+inttostr(length(astrs.strings[i]));
   showmessage(returncmd);
   end;
   ansi:='你好';
   showmessage(ansi);
   ansi:='左右123';
   showmessage(ansi+' len:'+inttostr(length(ansi)));
   astrs.free;

end.
----------------------------------------------
ddddd
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行42.96875毫秒 RSS