Я просто предполагаю здесь, потому что тип TCompressionSignature
является не предоставляется, но я могу воспроизвести ERROR2015
, если TCompressionSignature
объявлен как некий ShortString
, как
type
TCompressionSignature = String[8]
Как вы знаете, Delphi в настоящее время использует Unicode в качестве стандартной внутренней строковой кодировки. Для причин обратной совместимости тип ShortString
и другие короткие строковые типы (например, String[8]
) остались без изменений. Эти строки имеют одинаковую кодировку, такую как AnsiString
и состоят из стандартных простых старых 1-байтовых символов (AnsiChar
).
NewSig
, с другой стороны, состоит из двухбайтовых символов Юникода и не может сравниваться напрямую с ShortString
.
Одно решение вашей проблемы было бы заявить:
NewSig: array[0..SizeOf(NewCompressionSignature)-1] of AnsiChar;
Другим решением было бы быть приведение к строке:
if NewSig <> String(NewCompressionSignature) then ...
Но я бы предпочел, чтобы изменить объявление массива, если это возможно.
Ознакомьтесь с документацией short strings и about unicode - особенно если вы выполняете операции io, чтобы убедиться, что ваш вход и выход считываются и записываются с правильной кодовой страницей.
Какой продукт RS10? –
@RobKennedy: текущая версия, RAD Studio 10 Seattle. –
Пожалуйста, укажите тип 'TCompressionSignature'! – ventiseis