Принудительный контроль редактирования ANSI вместо элемента управления comctl32

Я создал модуль, который создает окно с полем редактирования из оконного класса EDIT. Он предназначен для работы только с набором символов ANSI и не использует юникод.

Я использую EM_GETHANDLE, чтобы получить буфер для элемента управления редактирования.

Теперь вот моя проблема: (цитируется по ссылке выше)

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 или у кого-нибудь есть идея, чтобы решить эту проблему?

1 ответ

Приложение использует COMCTL32.DLL если он указан в манифесте приложения, как описано, например, здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx

Если ваш модуль является DLL, то вы можете попробовать использовать некоторую технику изоляции, чтобы она не зависела от того, какая версия COMCTL32.DLL.exe решил использовать, но это может принести много других недостатков.

Я рекомендую использовать WM_GETTEXTA или же GetWindowTextA() вместо этого, который скопирует преобразованную строку в ваш буфер. Разработка модуля, который требует, чтобы старая версия DLL работала правильно, - просто плохая идея.

Другие вопросы по тегам