Сегодня я узнал, что у GetWindowLong
(и GetWindowLongPtr
) есть варианты 'ANSI' (A) и 'Unicode' (W), даже если они не имеют аргументов TSTR
. Страница MSDN на GetWindowLong
указывает только на то, что эти варианты существуют, но не указывает, почему.
Я могу себе представить, что он должен соответствовать кодировке CreateWindowEx
(которая также имеет A / W ароматы) или RegisterClass
, но по многим причинам я не думаю, что это имеет смысл. Очевидно, это имеет значение, потому что кто-то сообщил, что версия Unicode может не работать на XP (даже если XP - это NT, и, насколько я понимаю, весь Unicode под капотом). Я также попытался разобрать 32-битную версию USER32.DLL
(которая содержит оба варианта GetWindowLong
), и была проделана дополнительная работа, основанная на некоторой очевидной разнице в кодировке *.
Какую функцию я должен выбрать?
* Ароматы GetWindowLong
идентичны, за исключением логического значения, которое они передают другим функциям. Это логическое значение сравнивается с битом флага в структуре памяти, которую я не могу отследить с помощью статического анализа кода.