![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Jr13san |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
Сколько не программирую на различных языках, но на с++ не перестаю удивляться. Иногда становится просто тошно от того, что ты знаешь как запрограммировать определённое событие, всё для этого есть, но синтаксис не позволяет тебе двигаться дальше. Такая же ситуация и здесь.
Пересмотрел пару десятков примеров вызова функции GetWindowText(), но ни один не работает. У меня есть только предположение о том, что я что-то упустил. Я сомневаюсь, что те части кода были обманом. Поэтому прошу помочь разобраться.
Ещё получилось выцепить ASCII символы из строки. Сейчас я не помню как тогда я написал. Но пришлось бы изобретать функцию преобразования всего этого в строку. А зачем передавать строку в непонятном виде, чтобы её нужно было потом преобразовывать? И это называется упрощение работы программисту? Даже нет слов. И грустно и смешно... Почему разработчики не могли сделать такую конструкцию? :
Наверное понравилось извращаться с переправкой данных за место того, чтобы этим занимался программист. Зачем наделали столько типов, что приходится на каждый вызов функции преобразовывать её выходные данные. Неужели нельзя было обойтись стандартными типами: short, int, long, byte, bool, string, double, и т.д. Зачем больше? Вместо того, чтобы работать над программным кодом, мне приходится искать преобразование типов или узнавать что это за таинственные типы параметров, передающихся в вызываемую функцию. Язык должен быть интуитивно понятным и простым в освоении, а не извращённым до нельзя. Результат самостоятельной работы над ошибками: Так как в проекте используется поддержка Unicode строк, то код выглядит следующим образом:
Чтобы проверить результат работы программы, нужно открыть окно блокнота(Notepad.exe) и запустить программу. Результат работы программы таков: 1. Получить идентификатор заголовка окна Блокнота. 2. По идентификатору окна получить обратно название окна. 3. Сравнить полученное название окна с заранее известным названием окна. Это сообщение отредактировал(а) Jr13san - 4.3.2012, 11:50 |
||||||
|
|||||||
LeonidPr |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: нет Всего: 1 |
А какое отношение к C++ имеет функция GetWindowText?
Это одна из функций API в Windows, а в хедэре просто описан её прототип, чтобы вы могли её вызывать. Если бы Microsoft сделала эту функцию такой:
то использовали бы её так, как вы написали:
Мне кажется (знатоки, поправьте пожалуйста, если я не прав), что первый вариант был выбран из тех соображений, что вы должны будете явно выделить буфер для строки и следовательно будете следить, что бы память была освобождена после использования. Во втором же случае, система сама неявно (для того, кто пользуется функцией) должна выделить память под возвращаемую строку. Следовательно, легко забыть освободить её, что может привести к неприятностям. Это сообщение отредактировал(а) LeonidPr - 3.3.2012, 21:40 --------------------
pkunzip.zip |
||||
|
|||||
Jr13san |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
А что тут очищать то? Может быть ещё вручную?
Я думаю так.. Функция возвращает "текст", а все переданные в неё параметры должны по идее сами удалиться из памяти после завершения работы этой функции. Но для этого должен существовать определённый "чистильщик". Или я не правильно мыслю в силу других языков, работающих таким алгоритмом? Это сообщение отредактировал(а) Jr13san - 3.3.2012, 22:04 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
причину нужно искать в себе. плохому танцору, в курсе что мешало? ;) тебе не понять. к тому же, там ошибка. в общем, тему на свалку. |
|||
|
||||
LeonidPr |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: нет Всего: 1 |
Что бы функция вернула текст, она должна выделить память под него. Вы с этим текстом поработали (вывели на консоль например). Теперь надо освободить выделенную под него память. Кто это будет делать? Я так понимаю вы, в C++ нет стандартного сборщика мусора.
--------------------
pkunzip.zip |
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
угу. правило такое есть: память нужно освобождать на то же уровне, на котором она была выделена. нет такого типа ![]()
страшно жить. скажи, на каких ты там языках программируешь? только по подробнее ;) есть такое мнение среди программистов: после изучения языка "Х", моцг напрочь отказывается самостоятельно мыслить. Это сообщение отредактировал(а) boostcoder - 3.3.2012, 22:21 |
||||
|
|||||
Jr13san |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
Как раз-таки здесь причина в самом языке программирования. Скорей всего тебе не понять мою мысль. И вот наверное твоя же фраза это подтверждает:
Ага, куда же ей ещё. Жди, сейчас мусоровоз подъедет. Если тебе тема не интересна, то это не значит, что всё тут напрасно. Я пытаюсь разобраться с помощью людей, которые разбираются в данном языке и готовы как-то помочь. А от тебя одни сплошные комментарии, а толку 0. Даже если этого сборщика нет, это не беда, это лишь отсутствие автоматизации данного языка. Дело в том, что функция возвращает не пойми что. Попробуйте написать что-то работающее на основе того, что я написал. в c++ может быть и нет, но в других ЯП есть тип string и он на много удобнее и проще чем char, TCHAR, WCHAR, ZLUPECHAR. Извините за последний "агрессивно-вымышленный" тип, но таковы реалии. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
в данном случае нет, но дело даже не в этом. Если тебе не нравится язык, зачем ты на нём пишешь?
-------------------- Обижено школьников: 8 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
тот код что ты привел - Си. в с++ как раз таки строки есть. это лишнее подтверждение моих слов ![]() так на каких ты там языках пишешь? |
|||
|
||||
Jr13san |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
ты не понимаешь одну из основ самосовершенствования: критика всего вокруг себя но только не себя - обрекает тебя на постоянное совершение того, что ты сейчас делаешь. а именно - говорить что что-то не так и не эдак, вместо того чтоб признать, что ты банально читать не умеешь. ибо для этой функции есть дока, и любой адекватный человек, за несколько минут разберется с тремя аргументами. по этому, снова спрошу: плохому танцору, знаешь что мешает? Добавлено @ 22:58 для танкистов, повторяю: это Си! Это сообщение отредактировал(а) boostcoder - 3.3.2012, 23:01 |
|||
|
||||
marsh123 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 22.6.2008 Репутация: нет Всего: нет |
Сообщил в Microsoft гениальную идею автора, пообещали, что исправят.
![]() |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
marsh123, сообщи ТСу адресок. чтоб в следующий раз он сразу им писал
![]() |
|||
|
||||
Jr13san |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
Ок. Я так понял, помощи я здесь не найду.
Прощу прощение у адм. за пустую созданную тему. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
А скорость написания выше разве что по сравнению с асмом, лол. Нет никаких причин писать user-mode приложения для windows на плюсах или чистом си. Это не нужно, для этого есть более удобные инструменты. А проблема описанная в оппосте связана даже не с языком, а с тем что ты не въехал в винапи, но пытаешься его использовать. Он совершенно сишный, со всей вытекающей ручной работой Это сообщение отредактировал(а) bems - 3.3.2012, 23:05 -------------------- Обижено школьников: 8 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |