2016-01-27 106 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操作以確保您的輸入和輸出是使用正確的代碼頁讀取和寫入的。

相關問題