вторник, 29 мая 2007 г.

__noop и я

Для вывода отладочных сообщений у меня есть функция DebugMsgW со списком аргументов как в printf, которая внутри себя использует OutputDebugStringW. Ну и вызваю я её так:
::DebugMsgW(L"fafa\n");

И вот отладка прошла нормально, начинаю делать релиз. А без _DEBUG эта функция превращается так:
#define DebugMsgW __noop

Компилирую. И вижу тучу ошибок:
error C2039: '__noop' : is not a member of '`global namespace''

Начинаю ковыряться в опциях компилятора Compiler Intrinsics , какие-то #pragma intrinsics(..) подставлять. Нихуя.
Потом вдруг понимаю какой я идиот! Виной тому два двоеточия перед
DebugMsgW! Получается же ведь такое:
::__noop(...)

вот и ищет компилятор в глобальном пространстве имен этот __noop. А его там нет. Конечно.

Да я к чему это - внимательней надо читать сообщения об ошибках.

Моя первая программа для Windows Vista

Только что я удачно откомпилировал и запустил свою первую программу для Windows Vista. При чём это не какой-нибудь HelloWorld, а рабочая штука, которая общается с метабазой IIS7 и загружает snapin`ы.
Приятно почуствовать себя в псевдоавангарде.

понедельник, 28 мая 2007 г.

Оператор goto

Смотрю я на C++ примеры для работы с метабазой в Vista (IIS 7). Смотрю и радуюсь. Без оператора goto - ни шага.
Примеры рабочие и суть проясняют. Но по ним же будут учится дети!

Чуть о Vista

Научился 10 дней назад я работать с метабазой IIS. Требовалось мне от неё довольно мало. Всего лишь получить список сайтов с их id и именами. А сегодня я узнал, что всё это работать в Vista не будет! Нет в ней уже этого COM-объекта, который делал всю работу. Да и формат метабазы IIS изменился. Появился другой COM-объект. Вернее не другой, а куча других. Благо в доке SDK есть какие-никакие примерчики. Да и в инете можна кое-что найти.

Удивляет сам подход: всё похерить и сделать заново! обратная совместимость - для неудачников.
Microsoft никогда не оставить программистов (и своих и остальных) без работы - новая версия чего-нибудь - новые интерфейсы - новый гемморой.

пятница, 25 мая 2007 г.

PropertySheet побеждён

И так, задача:
VS2005, WTL 7.5, есть dll со snapin`ами для mmc, нужно их загрузить и сделать для них PropertySheet не как отдельное модальное окно, а в окне уже существующем (в моём случае диалоговом). Ну через COM-интерфейс получить доступ к этим snapin`ам понятно легко. Самым тяжёлым для меня оказалось сделать встроенный в диалоговое окно PropertySheet. После 8 часов ковыряний получилось. Но! Snapin начинал неправильно обрабатывать сообщения. И вешал всё приложение. Бок оказался в простом. Делать встроенный PropertySheet можна только в окне с внутренним фреймом! Типа CFrameWindowImpl. Тогда всё работает правильно.
Хотя, если догло и хорошо покурить, то наверно можно добиться и правильной обработки сообщений и для диалогового окна.
Ссылки:
1
2
и что-то ещё с www.codeproject.com

четверг, 24 мая 2007 г.

О хохлах и неграх

Позавчера мой кореш ехал по загородной трассе домой. Масленный насос сломался. А инструмента в машине оказалось не достаточно, что бы поковыряться в нём. Стал голосовать, что бы кто-нибудь стал да подсобил. Полтора часа простоял безрезультатно. И тут вдруг встерчная машина останавливается. И выходит из неё негр. Говорит: чем могу быть полезен? Помог, короче. Денег никаких не взял за потраченное время.
А проезжающим мимо украинским буржуа похуй. Не их же насос сломался.

вторник, 22 мая 2007 г.

PropertySheet

IDataObject и IPropertySheetCallback - это просто. Реализацию делай как тебе удобно. Совсем другое дело этот PropertySheet. Курил я его догло. Полдня. Нужно, что бы он создавался не в отдельном своём окне, а на уже существуюшем контроле (по-моему можно любом). Не такая очевидная задача, как кажется на первый взгляд. Конечно если использовать WTL и не использвать MFC, так как в MFC эта задача решается очень просто. Нашёлся нужный пример на CodeProject. Который я выкачал ещё утром, но не понял всей его важности для себя. Технические подробности опишу в следующий раз. И это наверно будет уже послезавтра. А завтра - комммандировка ненавистная.

Бежать и спасибо Шкоде

Неправильно бегаете вы по утрам. Без гантелей, правда? Это неправильно. В каждую руку по гантеле и бежать, бежать, бежать. Стиснув зубы и задыхаясь.

Спасибо говорю Шкоде. Она сломалась. И теперь не сможем поехать в грёбанную комммандировку. А я займусь интерфейсами IDataObject и IPropertySheetCallback. Вечер, ночь и утро они не давали мне покоя. Я продумал много деталей. Но конечно не все.

Скажу, что намудрили, конечно, Microsoft, намудрили.

понедельник, 21 мая 2007 г.

IDataObject

Для того, что бы руками вызвать snapin, который зарегистрирован для MMC, нужно иметь два интерфейса: IDataObject и IPropertySheetCallback. Сегодня я курил первый. И понял, что его лучше не искать у какого-то COM-объекта, а просто нужно реализовать самому. Т.е. наследовать от него класс и имплементировать все нужные методы. Делов то!

воскресенье, 20 мая 2007 г.

Заяц, поломанное сиденье и snapin`ы

Несмотря на то, что мне ещё нужно долго и упорно курить COM и IIS, на выходных я плюнул на всё. Я поехал в родной провинциальный городишку. Сел рано утром на велосипед, взял фотокамеру и поехал лесами-степями. Масса положительных впечатлений! Сколько там всякой живности! Ужи-ящерки, утки-гуси, цапли-аисты, заяца чуть не задавил. Хорошо. Вброд переходил реку, правда потом оказалось, что перешёл на остров и вернулся обратно, сломал сиденье на велике и остальные 10 км домой ехал стоя на ногах.
Взамен я кажется уже полностью понял как работают snapin`ы для mmc. Завтра с утра и проверю.

пятница, 18 мая 2007 г.

IIS Metabase

Тем, кто начинает работать с метабазой IIS, очень рекомендую посмотреть этот код для примера:
http://www.google.com/codesearch?hl=en&q=+IMSAdminBase+EnumKeys+show:8nuIGF-G2DA:EWYTcYGK1Rk:RGWQZJDNrt4&sa=N&cd=5&ct=rc&cs_p=http://www.opensource.apple.com/darwinsource/tarballs/other/apache_mod_php-6.2.tar.gz&cs_f=apache_mod_php-6.2/php/ext/iisfunc/iisfunc.cpp#a0
Мне очень помог. Там всё нормально компилиреутся и работает. В предыдущем моём посте описан бок, который был у меня.
Смех в том, что код этот из mod_apache_php в исходниках Darwin (ядро MacOS X :))))
Возникает такой вопрос: можно ли найти пример кода для apache в исходниках Microsoft?
Смешно, правда?

error LNK2001

Начал я юзать метабазу IIS. Как-то так:

#include "iadmw.h"
#include "iiscnfg.h"

void f(){
HRESULT hRes = 0;
CoInitialize(NULL);
Res = CoCreateInstance(CLSID_MSAdminBase_W,
NULL,
CLSCTX_ALL,
IID_IMSAdminBase_W,
(void **) &pIMeta);
if (FAILED(hRes))
DebugMsgW(L"CoCreateInstance failed.\n");
}


И, компилируя, получаю:

MetaBaseSimple.obj : error LNK2001: unresolved external symbol _CLSID_MSAdminBase_W
MetaBaseSimple.obj : error LNK2001: unresolved external symbol _IID_IMSAdminBase_W

Роюсь в MSDN. И нахожу такое: http://support.microsoft.com/kb/130869
Оказывается, нужно первее всех включить файл initguid.h. Тогда всё работает.
Странное решение. Затычка какая-то.

четверг, 17 мая 2007 г.

Красота кода или быстрота кодинга

Сегодня столкнулся с такой проблемой. Быстро наляпал нужный мне класс, але-оооп - работает. Но как это всё выглдит? Жутко. Некрасиво, небезопасно, никаких проверок, потом и утечки вижу присутствуют. Ну и где-то полчаса потратил на вылизывание.

Поворот

Десять дней назад я жил другой жизнью. Я был в восторге от Питона и Джанги, у меня была идея своего вебдваноль-стартапа, я вёл другой блог, я нихера толком не делал и мечтал о том, как куплю MacBook Pro.

Вот такие бывают в жизни повороты,
Но это не значить, что никому нельзя верить.
Жизнь очень сложная штука,
А Мише нужно оторвать яйца!

среда, 16 мая 2007 г.

GUI в Visual Studio

Много лет я делал все интерфейсы пользователя для Винды при помощи библиотеки VCL сначала в Delphi (ещё в институте), а потом и в C++ Builder (уже на работе). Просто, понятно, весело, легко. И вот лицом к лицу WTL / ATL / WinAPI / COM / ISAPI. Тошнит.
Но теперь я понимаю почему в институте учат именно Delphi. Во-первых WTL, ATL, WinAPI - это не просто, это требует глубоких знаний. Во-вторых, VCL - простая и понятная штука не столько для студентов, сколько для преподов. А большая часть из них (из преподов, да и из студентов тоже :) - лентяи.

MFC, WTL

Продвинутые программисты, которые уже много лет пишут под Windows, не советуют мне использовать MFC (для создания GUI в частности). Советуют настойчиво WTL.

http://sourceforge.net/projects/wtl/

вторник, 15 мая 2007 г.

Ах, Linux! Ох, Windows!

Последние года два-три я прививал в себе любовь к Линуксу, и копил ненависть к Винде.
Последние полгода я работаю только под Линуксом. И мне это нравится, чёрт подери!
Но.
Судьба поворачивается так, что теперь я подключаюсь (надеюсь на долго) к большому проекту для Винды с Visual Studio, MSDN, Vista и дальше.
Тошнит, пока. Но работать нужно.
Брезгливость все же не самое лучшее качество для программиста.

Боевой сервер

Рад сообщить, товарищи, что сегодня пошёл 73-й день аптайма моего сервера.
Очень простой серверок: Sempron 2300 / 256M / IDE HDD Samsung 20G. Стоит Ubuntu 6.06 Server. А живёт на нём:
  • firewall на iptables + шлюз в инет для всех в сети
  • почта postfix + dovecot + spamassassin
  • веб-сервер (apache понятно) с нашим внешним и внутренним сайтом + mysql с базой данных для сайта.
  • named нэйм-сервер
  • и для удобства ftpd, sshd
Был бы аптайм наверно и больше, да свет в начале марта отключали на долго и ИБП (тоже очень простой) не выдержал.

А я к чему - дёшево и сердито.

понедельник, 14 мая 2007 г.

Advantech PCA-6134P

Задумали мы проверить один переходник из RS-232 в RS-485. Нашли старенькую SBC Advantech PCA-6134P. Второй порт её можно настроить на 485-й интерфейс джамперами. Начал я искать мануал. На сайте advantech.com.tw не нашёлся (или хорошо спрятали?).
Нашёл тут. Обрадовался. Смотрю - на моей CBS не хватает джамперов. Вот просто нет и всё. На схеме мануала есть, а на плате нет.
Вот такая засада.

Новая жизнь

Легко начинать новую жизнь.
Трудно жить этой новой жизнью каждый день.

Попробуем начать ещё раз.
Правда в этот раз я не даю никаких обещний ни себе, ни кому, что эта новая жизнь продолжится.