那位高手能帮忙说下吗,我D7的代码转成D2009经常出现字符串数据类型不对的问题,比如这几个Char,AnsiChar.string,AnsiString,又不知道怎么改,那位高人能给详细说说啊!谢谢了!

解决方案 »

  1.   

    在d2009之前,Char对应的是AnsiChar,PChar对应PAnsiChar,string(未映射成老的ShortString)对应AnsiString;而在d2009里,对应的是WideChar,PChar对应PWideChar,string对应UnicodeString
    UnicodeString是d2009中出现的新字符串类型,之前没有对应版本;d2009中的AnsiString也和之前版本的AnsiString类型有差别(多了两个word,一个表示code page,另一个表示element size),但基本上可以一样用,它与UnicodeString使同相同的管理。如果在d2009之前用过tntware套件的话,从没有引用计数的WideString过渡到d2009的UnicodeString完全没难度
    至于文本的encoding/decoding,就不是一两句就说的明白的了,关于unicode、gb2312、gb18030、utf-8、utf-16(le/be)之类的还是慢慢找资料看吧,作为东亚地区的程序员非常有必要了解一下
      

  2.   

    com:string;
    begin
         winexec(pchar(com),sw_hide);那请问Seamour 上面的D7代码在D2009里面出了如下的错误,[DCC Error] Unit1.pas(77): E2010 Incompatible types: 'Char' and 'AnsiChar'我改成如下就好了:com:string;
    begin
         winexec(PAnsiChar(AnsiString(com)),sw_hide);是不是要这样改呢,我就是想知道在D7改成2009后经常出现的这个字符串错误在2009里面怎么改啊?
      

  3.   

    看参数要求什么呗,WinExec没有unicode版本的,只能传PAnsiChar
    个人对d2009的语法迁移方式很有意见,表面上是减少老代码迁移的工件量,实际上会直接拿过来用会弄出一堆问题来。而且就算改到编译通过了也很可能会有隐含的问题,以及编译器对 #N 形式字符常量的二义性问题,再加上在cb中不可避免的String.c_str()/t_str()无法直接改unicode选项的问题,我认为d2009在字符串方面的语法迁移是非常失败的