2010-07-20 39 views
4

是否有更簡單的方法將Delphi 7轉換爲Delphi 2009? 或者在Delphi 2009項目中使用Delphi 7單元嗎?有沒有更容易的方法將Delphi 7轉換爲Delphi 2009?

我在Delphi 7中有一個單元,但當我嘗試在我的Delphi 2009項目中使用它時,行爲都搞砸了。

它有很多的類似的差異:

Hangul = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ' + 
      'ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅛㅜㅠㅡㅣ'; 
ShowMessage(Copy(Hangul, 1 + (I) * 2, 2)); 

顯示在Delphi 7中,但兩個時間的一個字符在Delphi時間2009年 所以,我需要將其更改爲:

ShowMessage(Copy(Hangul, 1 + I, 1)); 

但這是最簡單的,它會變得更加混亂......算法不是我的,所以我無法弄清楚整個程序。

任何幫助,將不勝感激。

編輯: 如果有人有興趣看到這裏的代碼是LINK。這是unit HanInput;的一部分。它翻譯鍵(英文)並輸出韓文字符。不,我不懂韓語。

回答

5

我想看看你的.pas文件的編碼。例如,您可以使用Notepad++來做到這一點。如果它不是UTF-8,請使用記事本++將其更改爲UTF-8。這應該保留這些字符並使它們在D2009中可讀。哦,並確保包含UTF-8 sis的BOM(字節順序標記)。

不知道該文件是否仍然可以在D7中使用,儘管...(不知道何時將UTF-8支持添加到IDE中)。


示例中的Hangul字符串和鏈接中的HanInput單元每個字符有兩個字節。這告訴我他們打算做UTF-16編碼。

這是由MultiByteToWideChar調用確認的,儘管它們用於參數而不是常量。如果你真的把UTF-16編碼到函數中,你可以擺脫那個調用,但是你仍然需要找到一種方法來處理這些常量。

處理常量 - 我沒有在HanInput單元中看到太多 - 可以像將字符串複製到新的Ansi編碼的Notepad ++文件一樣簡單,將其編碼更改爲UTF-8,然後複製字符串回到你的單位。您可能希望確保首先將所有字符串複製到新的記事本++文件中,然後將其轉換並複製回來,因爲IDE編輯器可能會問您是否要將單位格式更改爲UTF-8,並且可能會破壞常數。

+0

的韓語字符變成像「ĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœ」 ..不可讀的東西:C – Dian 2010-07-20 09:27:23

+0

上午我在Ansi中編碼原始文件(D7)是否正確?在這種情況下,由於字符串是在Ansi文件中編碼的「UTF-16」,因此該字符串將會發生損壞,然後當您將Ansi轉換爲UTF-8時,字符串的字節將被單獨轉換爲UTF-8,並導致不可讀的內容。同時您可以嘗試的方法是嘗試將常量聲明爲RawByteString(在幫助中查找它),然後在D2009中不做任何翻譯,因爲編譯器應該在將它分配給UTF-16LE時負責轉換它一個字符串。 – 2010-07-20 09:39:57

+0

是的。原始文件在Ansi中編碼。好吧,我會這樣做的。謝謝您的幫助。 – Dian 2010-07-20 10:02:23

4

在D7的sizeof(字符)等於1,而D2009爲2。因此,這可以幫助你:

ShowMessage(Copy(Hangul, 1 + (I) * Sizeof(Char), Sizeof(Char))); 
+0

對於SizeOf(Char)而不是2來說是+1。但是如果pas文件被編碼爲別的東西,不知道會發生什麼,儘管編譯器足夠聰明,可以在所有格式的字符串中添加常量他們被分配。 – 2010-07-20 09:23:45

+0

另一方面,複製不適用於字節計數,而是字符計數。操作程序必須從2(D7)更改爲1(D2009)以使其正常工作。 SizeOf(Char)將在D2009中爲任何普通字符串返回2,所以這沒有幫助。 – 2010-07-20 09:26:49

+0

WHEREVER你的代碼假定sizeof(Char)= 1,你必須修復它。 – 2010-07-20 20:08:37