delphi – 对包含WideString的记录指针使用New / Dispose
我有很老的代码(来自D3):
TMyRecord = record Index : Integer; Header : String[70]; Strings : Array[1..MAX_VALUES] of String[70]; end; TMyClass = class(TComponent) FData : ^TMyRecord; ... end; constructor TMyClass.Create(AOwner: TComponent); begin inherited Create(AOwner); New(FData); ... end; destructor TMyClass.Destroy; begin Dispose(FData); inherited; end; 问:用WideString替换String [70]是否安全;字符串[70]的数组[1..MAX_VALUES]和WideString的数组[1..MAX_VALUES]? (请解释原因) 我需要这个在Delphi 7中支持Unicode. 解决方法
通常,您不应该使用Widestring.
它仅用于与COM BSTR兼容. 但是,您使用的是2009年之前的版本,因此如果您需要Unicode,则无法选择. 就像shorttrings WideStrings不是引用计数一样,但是当你处理记录时它们会被销毁. 每当Widestring超出范围时,它就会被销毁. 注意PWideChar,当WideString被破坏时,这些将是悬空. VCL无法显示WideString 如果你要将WideString分配给(Ansi)字符串,你也可以使用普通字符串,因为你将失去所有的unicode. 警告:亚洲语言环境中的索引
是的,但更容易用String(又名AnsiString)替换String [70].因为D7 VCL支持AnsiString但不支持WideString. 进一步阅读 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |