Был сегодня в Microsoft'е. Из интересного — сертификация под Windows 7 теперь бесплатна. Как получить лого за один день(при должном упорстве) можно посмотреть тут.
Еще выдали интересные книжки «Обеспечение совместимости приложений с Windows 7 — пособие для разработчиков» (PDF версия) и «Обеспечение совместимости приложений в Microsoft Windows Vista и Windows 7 — Руководство для IT-специалистов» (PDF версия).
По мелочам: VS2010 Beta 2 выйдет до конца года, а Windows 7 уже проходит сертификацию в силовых ведомствах.
четверг, 25 июня 2009 г.
7 (Seven)
Posted by
Kirill V. Lyadvinsky
обновлено:
2009-06-25T19:32:48Z
Labels:
разное
,
programming
,
Windows
среда, 24 июня 2009 г.
Немного ссылок
Не все программисты умеют рисовать. Для них существует www.iconfinder.net. Большинство иконок там используют лицензии GPL, LGPL, CC или Free. Можно задать поиск по ключевым словам и размерам.
Ещё можно искать картинки похожие на те, что где-то увидели. На сайте tineye.com можно загрузить свою картинку и найти похожие с лучшим качеством. Похоже, что поиск работает.
Ещё можно искать картинки похожие на те, что где-то увидели. На сайте tineye.com можно загрузить свою картинку и найти похожие с лучшим качеством. Похоже, что поиск работает.
Posted by
Kirill V. Lyadvinsky
обновлено:
2014-03-18T05:49:22Z
Labels:
разное
,
favourites
суббота, 20 июня 2009 г.
Семинар Microsoft
Microsoft проводит последний(до выхода Windows 7) однодневный семинар посвященный обсуждению вопросов обеспечения совместимости приложений. Семинар пройдет в Москве 25-го июня. По ссылке можно ещё успеть зарегистрироваться.
Posted by
Kirill V. Lyadvinsky
обновлено:
2009-06-20T14:43:43Z
Labels:
разное
,
programming
,
Windows
x or X and stackoverflow.com
Некоторое время назад я писал о том как можно проверить наличие той или иной переменной в структуре или классе. Оказалось, что оба описанных метода некорректны с точки зрения стандарта. Решение было получено на страницах сайта stackoverflow.com, который был организован Джоелом Спольски(Joel Spolsky) и Джефом Атвудом(Jeff Atwood). Само решение можно посмотреть тут.
Рекомендую обращаться к страницам указанного сайта тем, кто этого ещё не делает. Там бывают интересные вопросы и ответы.
Рекомендую обращаться к страницам указанного сайта тем, кто этого ещё не делает. Там бывают интересные вопросы и ответы.
Posted by
Kirill V. Lyadvinsky
обновлено:
2015-12-16T11:57:50Z
Labels:
Cplusplus
,
programming
,
template
вторник, 9 июня 2009 г.
Хозяйке на заметку
Следующий метод отладки имеет весьма узкое применение и в большинстве случаев может оказатся неподходящим. Описанное решение пришло в результате поиска проблемы в чужом коде, написанном в ужасном стиле (смесь С++ и С). Речь пойдет о защите памяти с помощью функции VirtualProtect. Эта функция позволяет изменить режим доступа к страницам памяти: только чтение, копирование по записи, полное отсутсвие доступа и далее. Полный список флагов можно найти в документации.
Для целей отладки интересен флаг PAGE_NOACCESS. Он позволяет ловить запись или, что более важно, чтение за пределами некоторой валидной области памяти. Для удобного применения VirtualProtect был создан следующий класс:
Применять его можно следующим образом:
В приведенном примере, как и в реальной программе, была добавлена защитная область памяти прямо на стеке. Удачной отладки.
Для целей отладки интересен флаг PAGE_NOACCESS. Он позволяет ловить запись или, что более важно, чтение за пределами некоторой валидной области памяти. Для удобного применения VirtualProtect был создан следующий класс:
struct protect_mem_t { protect_mem_t(void* addr, size_t size) : addr(addr), size(size), is_protected(FALSE) { protect(); } ~protect_mem_t() { release(); } BOOL protect() { if (!is_protected) { is_protected = VirtualProtect(addr, size, PAGE_NOACCESS, &old_protect); } return is_protected; } BOOL release() { if (is_protected) is_protected = !VirtualProtect(addr, size, old_protect, &old_protect); return !is_protected; } protected: void* addr; size_t size; BOOL is_protected; DWORD old_protect; };
Применять его можно следующим образом:
const size_t PAGE_SIZE = 4096; int main() { const size_t var_size = 1024 * 96; // 1024*96 - некоторый размер. Конкретное значение здесь только в качестве примера. const size_t guard_size = PAGE_SIZE * 2 - var_size%PAGE_SIZE; __declspec(align(4096)) char some_var[var_size + guard_size]; protect_mem_t guard(&some_var[var_size], PAGE_SIZE); some_var[5] = 20; // that's ok char x = some_var[5]; // that's ok char y = some_var[1024 * 96 + 1024]; // access violation return 0; }
В приведенном примере, как и в реальной программе, была добавлена защитная область памяти прямо на стеке. Удачной отладки.
Posted by
Kirill V. Lyadvinsky
обновлено:
2016-02-20T07:46:57Z
Подписаться на:
Сообщения
(
Atom
)