冥界3大法王 发表于 2023-1-25 23:29

不懂就问,此话何来? 如何对上?

http://www.360doc.com/content/12/1020/16/7662927_242617161.shtml


delphi2010中使用pchar时E2010 Incompatible types:
在网上搜了一个ping函数,用到pchar(string),编译时出现这个错误,其实以前也碰到这个问题:

delphi7版本中的Pcharh函数在delphi2010中使用时,编译时出现错误 :E2010 Incompatible types: 'Char' and 'AnsiChar'

这时可以这样使用:

PAnsiChar(AnsiString(string));

说明:


在 delpin中之前,Char对应的是AnsiChar,PChar对应PAnsiChar,string(未映射成老的ShortString)对应 AnsiString;而在delphi2010里,对应的是WideChar,PChar对应PWideChar,string对应 UnicodeString
UnicodeString是delphi2010中出现的新字符串类型,之前没有对应版本;delphi2010 中的AnsiString也和之前版本的AnsiString类型有差别(多了两个word,一个表示code page,另一个表示element size)

但基本上可以一样用,它与UnicodeString使同相同的管理。如果在delphi2010之前用过tntware套件的话,从没有引 用计数的WideString过渡到delphi2010的UnicodeString完全没难度。





{:301_1006:}让我最生气的就是红字的这几行。
他们是如何版本对上路子的?
画重点,请!谢谢!
经常折腾几轮才成功!{:301_972:}

DEATHTOUCH 发表于 2023-1-26 02:40

因为Delphi 2010之前是没有Unicode的,默认String = AnsiString,Char = AnsiChar,然后Delphi 2010之后引入了Unicode,然而实际上这个Unicode指的可能是UCS-2,不确定是不是UTF-16LE。
当然实际上Delphi这个做法并不怎么样,远不如直接引入UTF-8来的实在,毕竟都2010年了,不是微软开发NT的那个时代(没有UTF-8)。
不过这样也有一个好处,就是支持多语言什么的更加方便,而且界面显示和系统无关,不然按照Delphi7的样子你中文系统运行正常的跑别的系统就乱码。
回到Delphi2010,其实它的改动挺大的,但是那个时候已经太晚了,早就不是他的时代了。
当然隔壁Free Pascal就默认用的AnsiString,但是编码方式是随源代码文件的,用UTF-8就是UTF-8,而Lazarus内部是完全的UTF-8。还有知名框架如mORMot也是用UTF-8。

WZL1188888 发表于 2023-1-26 08:16

路过学习

冥界3大法王 发表于 2023-1-26 09:21

@DEATHTOUCH我感觉应该是 UTF-16LE
为啥呢?因为那个TotalCommander(众所周知就是Delphi编译的。。。此类知名软件法王姥爷不打草稿说出几百个来)
当使用导出选中文件列表后,输出的TXT的编码就是那个的。
而我自制的。。就没有任何导入的效果。

DEATHTOUCH 发表于 2023-1-26 21:08

冥界3大法王 发表于 2023-1-26 09:21
@DEATHTOUCH我感觉应该是 UTF-16LE
为啥呢?因为那个TotalCommander(众所周知就是Delphi编译的。。。此 ...

TotalCommander的32位版是用Delphi 2的编译器编译的,64位是用10多年前的Lazarus和free pascal搞的,这个是作者自己说的,至少9.5的版本是这样的,我用die查壳也可以确认。
所以TC肯定是自己实现了各种编码包括utf8和utf16这类来搞的。

cn2jp 发表于 2023-1-26 21:11

哎我也不懂呀

mdim156 发表于 2023-1-26 21:41

学习到了。理解楼主心情
页: [1]
查看完整版本: 不懂就问,此话何来? 如何对上?