Limons, так нужно обозначать чётко проблему, ошибку. Сами же написали "Проблема с юникодом, как решить эту проблему?", т.е. это означает что выводятся "кракозябры", а не некомпилируется
Если это TASM или MASM, то обращение к X (где объявлено X db ?), это обращение к данным, памяти; offset X это есть смещение [от начала сегмента], т.е. адрес X [в сегменте данных].
Это
Limons, вы могли назвать функцию-колбэк не enumWindowCallback, а mywcb_1, для компилятора это просто функция с определённой сигнатурой; кроме того, могли объявить точно так же mywcb_2, которая делает что-то другое. В функию EnumWindows первым параметром передаётся функция, или точнее, указатель на функцию, которую она будет использовать как колбэк.
Что касается юникода. Пробовали вариант из ответа выше/ниже, где с буковкой A ф-ия WinAPI и еще set...cp в main?
Limons, вы могли назвать функцию-колбэк не enumWindowCallback, а mywcb_1, для компилятора это просто функция с определённой сигнатурой; кроме того, могли объявить точно так же mywcb_2, которая делает что-то другое. В функию EnumWindows первым параметром передаётся функция, или точнее, указатель на функцию, которую она будет использовать как колбэк.
Что касается юникода. Пробовали вариант из ответа выше/ниже, где с буковкой A ф-ия WinAPI и еще set...cp в main?
Если скомпилируется, возможно тогда и у ......Length букву A, хотя если оно длину текста, а не кол-во байт возвращает, то всё равно...
И, если будет ошибка, то const_cast<char*>(windowTitle.data())
Да. Нужно написать "StringT db 9 dup (?)" для ограниченной максимальной длины ввода в 8 символов (если не путаю). "mov cl, RealSymb" загрузит значение байта RealSymb (второй байт структуры-буфера) в CL.
Вопрос в заголовке темы абсурден, т.к. при программировании на ассемблере заранее определеного понятия "массив" нет.
Limons, колбэк это то, что будет вызывать ф-ия enumwindows при своём вызове; вы вызываете её, а она вызовет вашу функцию для каждого окна (или еще для всех кнопок, полей (можно уточнить), т.к. кнопки и элементы управления это тоже окна в некоторых аспектах терминологии WinAPI).
Limons, А зачем теперь два string. В title и будет заголовок. Можете поменять название переменной на windowTitle.
char* и LPSTR это должно быть одно и то же. Т.е. эти все типы это псевдонимы (typedef'ы). Так, тут есть проблема с юникодом, замечу предотвращая вопрос о том, что речь шла о LPWSTR. И еще была в первоначальном коде возможна ошибка, связанная с завершением нулем строки (но в последнем нет).
По идеи я рассчитывал, что указав именно (char*) мы как-бы проверим, что LPSTR это именно char*, т.е. указатель на байты. Если нет, то думал должна появиться ошибка типа "const char* cannot be cast to LPWSTR (aka wchar_t*)".
А по существу -- вы же в своём ответе указали вызов ф-ии WinAPI с передачей собственной колбэк-функции.
Issue, Не-не-не, когда пишем '\n', то добавляется один символ с кодом вроде бы 13 (или 10), если добавить "\r\n", то добавитя два символа. Что-бы в строке была косая черта нужно писать "\\". В Windows перевод строки идёт выводом "\r\n", но при выводе только '\n' библиотека добавит корректную последовательность переноса строки (IMHO) в вывод на консоль. При вводе многострочного текста этот же символ '\n' будет при переносе строки.