2013-02-11 35 views
0

我構建了一個模塊,該模塊使用windows'編輯窗口類的編輯框創建窗口。它只能用於ansi字符集,不能使用任何unicode。我使用EM_GETHANDLE來接收編輯控件的緩衝區。強制使用ANSI編輯控件而不使用comctl32編輯控件

現在,這裏是我的問題:(從上面的鏈接引用)

Note For Comctl32.dll version 6, the buffer always contains an array of WCHARs, regardless of whether an ANSI or Unicode function created the edit control. For more information on DLL versions, see Common Control Versions.

所以,當我的模塊被由已經COMCTL32初始化一個應用程序,我的整個代碼加載斷裂。

我的問題:有沒有辦法阻止CreateWindowA使用comclt32或有人有想法解決這個問題?

+0

您的預防答案在引用文字中。 Unicode有什麼問題,特別是如果你不打算全面支持它的話。只要扔掉或忽略你無法處理的東西,或者更好地輸入一些你不想處理的東西,例如給用戶一個錯誤信息。非ASCII字符。 – 2013-02-11 12:26:45

回答

1

如果應用程序的清單中指定了應用程序,則應用程序使用COMCTL32.DLL,例如,在這裏:http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx

如果你的模塊的DLL,那麼你可以嘗試使用一些隔離技術,因此不依賴於該.exe決定使用什麼版本的COMCTL32.DLL,但可能會帶來許多其他弊端。

我推薦使用WM_GETTEXTAGetWindowTextA(),它會將轉換後的字符串複製到緩衝區中。設計一個需要老版本的DLL才能正常工作的模塊簡直就是個壞主意。

+0

感謝您的回答。我需要使用'EM_GETHANDLE',因爲我使用該句柄直接訪問控件的緩衝區並寫入(我知道我可能不會這樣做!)。 我想我需要使用CreateWindowW編輯控件來解決我的問題。 – typ1232 2013-02-11 12:37:05

+0

或者,使用'IsWindowUnicode()'來確定編輯窗口是由CreateWindowA()或CreateWindowW()創建的,然後調整緩衝邏輯以相應地使用CHAR或WCHAR。 – 2013-02-11 18:13:10