Компилирую... И что же? Опять ругается на функцию GetWindowText. Что за чудеса, непонятно. Не подскажите, в чем может быть проблема? А то я даже не представляю, с какого боку зайти. А то не хотелось бы везде явно указывать вызов юникодовых версий функций.
Здравствуйте, Privalov, Вы писали:
P>Здравствуйте, roman10, Вы писали:
R>>error C2664: 'GetWindowTextA' : cannot convert parameter 2 from 'wchar_t [256]' to 'LPSTR'
P>Объяви: LPTSTR szBuff;
Это не совсем то, что нужно. Мне нужна юникодная строка, и, соотвественно, вызов функции GetWindowTextW. Непонятно, почему не смотря на объявление UNICODE, препроцессор все равно упорно подставляет ASCII версию...
Windows API имеет для больщинства функций две версии, заканчивающиеся на литеры 'A' для ansi и 'W' для unicode (от 'wide char'). Отсутствие или наличие define UNICODE определяет, во что при компиляции превратится GetWindowText — в GetWindowTextA или GetWindowTextW. При этом, очевидно, GetWindowTextA принимает вторым аргументом char, а GetWindowTextW — wchar_t.
Чтобы проект нормально компилировался с W-версиями системных функций, передаваемые аргументы надо либо вручную задать правильно (wchar_t, WINDOWCLASSW итд.) либо использовать уже существующие define'ы, автоматически подставляющие нужные версии в зависимости от define UNICODE.
Для текстовых строк таким define будет TCHAR, который при наличиее define UNICODE превратиться в wchar_t , а при отсутствии — в char.
При использовании UNICODE надо везде аккуратно считать длину строк в символах, так как каждый символ уже 2 байта а не 1 как в ANSI. А то баги будут. Много .
У тебя где-то в файлах проекта явно задан #undef UNICODE или что-то похожее, приводящее к вызову не той функции. В том же файле, где вызывается GetWindowText , прямо перед #include <windows.h> поставь #define UNICODE
Здравствуйте, EyeOfHell, Вы писали:
EOH>Мои извинения, невнимательно прочитал вопрос .
EOH>У тебя где-то в файлах проекта явно задан #undef UNICODE или что-то похожее, приводящее к вызову не той функции. В том же файле, где вызывается GetWindowText , прямо перед #include <windows.h> поставь #define UNICODE
EOH>С уважением, Око
Благодарю, я так и поступил: поставил в начало stdafx.h и все вроде скомпилилось . Только я так и не понял, где может стоять #undef. В моем коде его нет. Может конечно где-то в недрах Platform SDK, но это было бы странно. Или вдруг глобальное определение через свойства проекта вдруг отвалилось . Чудеса, однако.
Мне сейчас как раз ASCII на выходе нужен, да еще LPSTR в приведенном сообщении об ошибке откуда-то взялось. Обычно char * показывается. Вот это меня и сбило.
Там рядом с #define UNICODE еще #define _UNICODE сделать, и можно голову не ломать.