Программирование

О безопасном приведении типов

August 3rd, 2009 Begemot

Семь раз отмерь – один отрежь (с)

Ну или вернее о той ерунде которую я сегодня написал.

Задача была такая: подменяем оконную процедуру, при получении определенного сообщения берем wParam, преобразуем к указателю на нужный класс и вызываем функцию член. Сразу представили ужасы, ждущие пользователя если нам придет это сообщение (откуда-нибудь), но без указателя на наш класс. А значит надо, как-то проверять. Как?

Первое что приходит в голову – dynamic_cast<>(), читаем что бы освежить запас мудрости:

Безопасное приведение по иерархии наследования, в том числе и для виртуального наследования.
dynamic_cast(base_class_ptr_expr)
Используется RTTI (Runtime Type Information), чтобы привести один указатель на объект класса к другому указателю на объект класса. Классы должны быть полиморфными, то есть в базовом классе должна быть хотя бы одна виртуальная функция. Если эти условие не соблюдено, ошибка возникнет на этапе компиляции. Если приведение невозможно, то об этом станет ясно только на этапе выполнения программы и будет возвращен NULL.
dynamic_cast(base_class_ref_expr)
Работа со ссылками происходит почти как с указателями, но в случае ошибки во время исполнения будет выброшено исключение bad_cast.

Спасибо Алёне, там же читаем и про остальные возможности приведения типов в c++.

dynamic_cast<>() приведение конечно безопасное, но wParam в XXX* преобразовывать оно разумеется не хочет, не компилится. Выкрутился следующим образом, благо у меня был базовый класс:

XXXBase  * t = reinterpret_cast<XXXBase*>(wParam);
XXX * p = NULL;
try
{
   p = dynamic_cast<XXX>(t);
}
catch(...) {}

if (p)
{
// all ok...
}

Абсолютно не представляю насколько это идеологически правильно, переносимо или хорошо, скорее всего неправильно, криво и непереносимо:). Но у меня работает, почему dymamic_cast кидает исключение вместо того что бы вернуть NULL, я правда не понимаю, но практика (Visual Studio 2008) показывает что так и есть.

Тестировалось передачей 0 в качестве wParam и заменой первой строчки на

int * tt = new int(4);
XXXBase  * t = reinterpret_cast<XXXBase>(tt);

Все ок – исключение ловится, замалчивается, указатель остается нулевой.


Каталог UI паттернов

February 3rd, 2009 Begemot

Каталог UI паттернов – примеры что и как делают лидеры софтостроения, чтобы облегчить жизнь простым пользователям. Не то что бы прямо руководство к действию или пошаговый алгоритм, но пробежатся глазами, посмотреть интересно. Заодно интересно посмотреть что можно делать на Silverlight, по-моему весьма недурственно.


Прогресс не остановить

January 3rd, 2009 Begemot

Все течет, растет и меняется раньше, еще два года назад мне писали в Uninstall form’у:

Takes up too much memory. 4-5Mb of constant memory usage, even with zero saved notes, is too much for what should be a very simple background utility. Also uninstalled Clipdiary for the same reason, as I already have a slightly simpler, but more functional and *much* smaller clipboard extender that I prefer. Flashnote especially should be under 1Mb, all the time. Even the full free NoteTab Lite text editor, with 5 open full text documents, consumes only 6Mb memory. All that app then needs is a hotkey to activate the window and it does *way* more than Flashnote for equivalent memory usage. I like the idea of Flashnote a lot, and would use it if it took only in the Kb range of memory.

Все мои утилит висят в трее все время работы компа. И поэтому меня немного напрягал переход на wxWidgets – там получаются большие бинарники. Но я перешел, теперь мне пишут в обзоре

This freeware improves your productivity by making information copying/managing task easier. It consumes little memory (around 5MB); a good software especially for a slow computer.

Прогресс… 🙂


Орки атакуют!

October 17th, 2008 Begemot

Интересно что хотела MS этим сказать?

Галактека в опасносте, Орки атакают

 

А вы говорили китайцы, китайцы…  🙂

MS собирается выпустить русскую версию 28 октября сего года. будут локализованны все версии студии от Express до Team Suite и MSDN (!)

Можно ли оценить объем работ по полной локализации Visual Studio 2008?

Да, в общей сложности – это порядка 12 миллионов слов, из которых 1 миллион слов для локализации интерфейса и 11 миллионов слов для локализации документации, библиотеки MSDN. По количеству слов это приблизительно равно объему 10 томов Большой Советской Энциклопедии.

Вообщем ждем и боимся:)


Может найдете что-то полезное для себя

October 1st, 2008 Begemot

Эхх попалось бы мне такое раньше, пару лет назад:)

List of Best Open Souce projects written in VC++/MFC

Куча всего, можно посмотреть реализацию, есть даже такие “глубокие”  вещи как firewall, “Folder Size for Windows adds a new column to the Windows Explorer details view that displays the sizes of files and folders”, некоторые вещи которые я хотел в свое время реализовать.

Вообщем как говорится, все уже написанно до нас.

Posted in Программирование
Comments Off on Может найдете что-то полезное для себя


А Ты Хороший Программист?

July 20th, 2008 Begemot

Вообще всегда считал себя достаточно слабым программистом, есть у меня такой пунктик, что-то типа комплекса неполноценности в этом плане:) Но вчера наткнулся на интересное определение:

Никаких особых требований, кроме большого (3-5 лет минимум) опыта программирования Windows MFC приложений. Помнить наизусть не менее двадцати пяти шоркатов Visual Studio.

Мфц пропустим, это есть и это не интересно. А вот про шоркаты мысль интересная, никогда бы не догадался так измерять уровень профессионализма:) хотя мысль безусловно здравая. Специально отошел от компа и начал их вспоминать. Я иссяк где-то после 35+ сокращений, видимо все не так уж и плохо в датском королевстве, однако следует признать что я жульничал считал шоркаты с шифтом, комбинации visuall assiat’a (хотя почему нет?), и даже пару стандартных типа ctrl+0, alt+f4 🙂

А сколько шоткатов вашей ide знаете вы, вы также круты?:)

 

Кстати, компании требуются толковые программисты с++ и php/sql, если знаете много shortcut’ов – дерзайте,  зарплату обещают достойную, если что с вас пиво:)

А если пальцев на руках вам вполне хватило когда вы считали известные сокращения  – учите VS 2008 hotkeys, давно где-то скачал, правда еще сам не распечатал себе.


ActiveWindowWatcher – бесплатная программа для ведения лога активных окон

July 18th, 2008 Begemot

Вчера на меня вдруг напал приступ трудоголизма, и я для внутренних целей написал небольшую программку для мониторинга и ведения лога активных окон (GetForegroundWindows). Возможно она может пригодится еще кому-нибудь кто пишет “специфические” приложения, типа вставлялок текста🙂 Итак:

 

ActiveWindowWatcher -  бесплатная программа для ведения лога активных окон.

Использование:

 
Существуют два режима работы:
1. Автоматическое логирование – окно проверяется по таймеру каждые 50 миллисекунд
2. Ручное – информация об активном окне читает по нажатию горячих клавиш ctrl+shift+p
 
В обоих режимах если текущее активное окно, тоже что и в прошлый раз, новая строчка в лог не добавляется.

Более подробно в Readme.txt

Программа была написана для себя и быстро,  так что без особых наворотов\фич, проблему помогла решить ну и ладно:) Если будет интерес народа,  возможно доработаю до чего-то более юзабельного.

Если что добро пожаловать с комментариями.

Скачать ActiveWindowWatcher

p.s. Программа написанна с использованием wxWidgets


Отдельный блог про wxWidgets

July 17th, 2008 Begemot

Если кто интересуется этой темой, то у меня теперь отдельный блог по программированию c wxWidgets.

Posted in Программирование | Tags:
Comments Off on Отдельный блог про wxWidgets


Винда не любит точки в конце папок

April 10th, 2008 Begemot

Есть у меня в программе функция экспорта базы данных в набор текстовых файлов. (Кстати кто не видел я вчера зарелизил свою программу для быстрых заметок полностью переписанную на wxWidgets). Так вот сегодня юзер пожаловался что у него среди заметок была папка с точками на конце (notes…) и после экспорта, эту папку нельзя ни открыть, ни удалить с жесткого диска – ошибка файловой системы. Такое вот западло случилось.

Так что когда создаете программно папки – удаляйте точки в конце. А если знаете как мне теперь избавится от кучи, оставшихся после тестирования, неудаляемых папок с винта – пишите в комментариях! А я в замен могу рассказать: how to get rid of the recycle bin.


Устанавливаем WxWidgets под Ubuntu 7.04 feisty

September 22nd, 2007 Begemot

Мой опыт установки, конечно не факт что правильный и полный, но выстраданный:) Говорят лучше ставить готовыми пакетами которые можно скачать с офф сайта wxWidgets, я решил компилить сам. Трафика гораздо меньше да и полезнее для общего развития. Так как в процессе меня этот незнакомый мир достал по самые нихочу, буду краток.

Read the rest of this entry »