2016-01-27 27 views
-2

我暂停了移植代码,现在我又花了一些时间。OPerand不匹配从D6转换为RS10

问题是,我想我仍然倒在脑后(一切正常工作在D6:D)。

谁能告诉我为什么这个简单的代码不工作?

if NewSig <> NewCompressionSignature then 

E2015操作并不适用于这一运算对象类型

这里是上面的定义:

NewCompressionSignature: TCompressionSignature = 'DRM$IG01'; 
NewSig: array[0..SizeOf(NewCompressionSignature)-1] of Char; 
+0

RS10是什么产品? –

+0

@RobKennedy:当前版本,RAD Studio 10 Seattle。 –

+0

请指定'TCompressionSignature'的类型! – ventiseis

回答

0

我只是在这里猜测是因为TCompressionSignature类型是没有给出,但我可以复制ERROR2015如果TCompressionSignature被宣布为某种ShortString

type 
    TCompressionSignature = String[8] 

如您所知,Delphi目前使用Unicode作为其标准内部字符串编码。出于向后兼容性原因,类型ShortString和其他短字符串类型(如String[8])保持不变。这些字符串具有与AnsiString相同的编码,并且由标准普通旧1字节字符(AnsiChar)组成。

NewSig另一方面是由两个字节的Unicode字符组成,不能直接与ShortString进行比较。你的问题的

一个解决办法是宣布:

NewSig: array[0..SizeOf(NewCompressionSignature)-1] of AnsiChar; 

另一个解决方案是将强制转换为字符串:

if NewSig <> String(NewCompressionSignature) then ... 

但我宁愿如果可以改变数组声明。

请查阅文档short stringsabout unicode - 特别是如果您正在执行io操作以确保您的输入和输出是使用正确的代码页读取和写入的。

相关问题