2009-05-04 97 views
1

我有一個Windows DLL,目前只支持ASCII,我需要更新它以使用Unicode字符串。這個DLL當前在很多地方使用char *字符串,並創建許多ASCII Windows API調用(如GetWindowTextA,RegQueryValueExA,CreateFileA等)。修改C++ DLL以支持unicode - 避免常見陷阱?

我想切換到使用VC++中定義的unicode/ascii宏。所以,而不是char或CHAR我會使用TCHAR。對於char *我會使用LPTSTR。我認爲像sprintf_s這樣的東西會變成_stprintf_s。

我從來沒有真正處理unicode之前,所以我想知道是否有任何常見的陷阱,我應該注意這樣做。是否應該像使用適當的宏替換類型和方法名稱一樣簡單,還是需要注意其他複雜因素?

回答

4

首先閱讀這篇文章由Joel Spolsky的:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

然後通過這些鏈接在計算器上運行:一般What do I need to know about Unicode?

,你正在尋找任何代碼假定一個字符=一個字節(內存/緩衝區分配等)。但上面的鏈接會給你一個很好的細節概要。

享受,

羅伯特C. Cartaino

+0

我很漂亮的原始記憶。我更擔心我可能會遇到的Win API問題,或者可能不會馬上出現的角落案例。 – Herms 2009-05-04 19:27:11

1

最大的危險可能是緩衝區的大小。如果你的內存分配是用sizeof(TCHAR)來表示的話,你可能會沒問題,但是如果有原始程序員認爲字符每個都是1個字節的代碼,並且他們在malloc語句中使用了整數,那麼很難做到全球搜索。

+0

只是grepped爲malloc,它只用於幾個地方,並且只有一次用於字符串緩衝區。在大多數地方使用新的(我寧願將它用於任何地方,我不喜歡混合分配技術)。我想我在這裏覆蓋。 – Herms 2009-05-04 19:25:44