InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте



Кабель конкорд ввгнг а 5х10. Кабель ввгнг ls 5х10 конкорд www.lampoved.ru.



Размещение сквозной ссылки

 

Создание универсальных ActiveX программ или самый лучший стандарт – это тот, что ты смог навязать окружающим.

В этой статье мы отправимся в экскурс по истории создания WinRazor SDK. Материал, излагаемый далее основан на личном печальном опыте и субъективном мнении автора. Тем, кто только собирается начать изучение программирования, это может помочь выбрать подходящий инструмент (IDE), а профессионалы могут читать это как худошественный текст и принимать мои советы по продлеванию времени разработки программ как руководство к действию.

Итак господа, вы хотите  создать ActiveX Control? Конечно да. Тогда задайте себе вопрос – зачем ? Ведь это требует значительно больших усилий чем создание обычной EXE – программы, да и работать оно будет медленнее. Вы скажете – для повторного многократного использования. А чем не годится для этого обычный объект в вашей программе ? На что вы ответите – чтобы дать наше творение другим разработчикам как готовую к использованию закрытую коробку. И тут я задам вам убойный вопрос – а все ли (в любой ли IDE) ее смогут использовать? И это вам не кролик, которого вы найдете в книге “Основы COM”. Практика использования различных IDE дает неутешительный ответ на этот вопрос.

Итак вернемся в те времена, когда WinRazor Control был написан на Visual Basic6. Выглядело это очень красиво – страница кода, простота и удобство визарда (справедливости ради стоит заметить, что визард очень умный, двусторонний – круто мужики поработали) В VB6 и в VC6 все работало хорошо.  И тут я подумал – а почему бы мне не вставить его в С++Builder 4. Проинсталлировать удалось, Property Table работает, заряжаю первую функцию, и вижу знаменитый синий экран в Windows 98, перезагрузился в W2k – тот сбрасывает задачу. Хочу заметить, что предварительно разногласия в типах данных я устранил. Это первое, что вы должны сделать, если хотите,  чтобы ваша компонента работала везде. Например, если вы создаете уомпоненту в VB, вы не должны выдавать наружу тип Integer, C – конверторы не смогут сконвертировать его в Short по размеру. Поэтому используйте Long.

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

Следующим этапом стал полный перевод программы на С (ваш покорный слуга в результате стал неплохим переводчиком между этими языками).

Создавая ATL-project на Visual C++ вы должны выбрать для себя один из двух путей – windowed или windowless.

В VB все было windowed (даже когда invisible at runtime). Использование MFC- ваше личное дело, перед тем, как выбрать MFC, задайте себе вопрос – а чего вам не хватает в ATL и Win API ?

Сначала я создал windowless control. Это решает много проблемм, которые возникают при использовании потерянных при этом возможностей. Например мне хотелось захватить окно предка, а что я могу захватить, если мой контрол не имеет собственного окна? Есть другие способы борьбы с этими проблемами, но сделав ваш контрол windowed вы получите более простой и изящный Win API интерфейс.

С переходом на VC  я поимел немало головной боли с интерфейсом IDE. Тут уже нету того двустороннего визарда, тут что напишешь пером – не вырубишь топором. Со временем я приноровился вручную редактировать почти все, что создается визардом, однако за это время немало “лестных” слов было сказано в адрес этой IDE.

И что-же я поимел? – Контрол стал работать порезвее, и вот он уже работает в C++Builder и в Delphi. Еще раз хочу предупредить вас насчет тщательного выбора типов данных. Бывает, что ваша функция не работает, а вы не получаете никаких сообщений  - причина может быть именно в несовместимости типов данных.

И вот моя компонента работает, но хочется  еще чего-нибудь наворотить да windowless не дает.

Делаем контрол windowed. И тут начинается самое интересное. Оказывается, что Borland и Microsoft расходятся во мнениях по поводу -  надо ли создавать окно объекта, если он Invisible? Выбор Borland на мой взгляд более логичен (не создавать) но меннее удобен для нас. Вообще-то вам никто не мешает спрятать ваш объект в невидимую зону форму. А что делать в Scripting Languages где только runtime ? Для этого и других случаев можно сделать функции Show и Hide. Следует принимать в расчет, что если окно контрола не создано, то все функции контрола, связанные с его окном (в первую очередь Events) работать не будут.

А что-же с Borland IDEs?

На мой взгляд – это наилучшее сочетание удобство – скорость при большом количество явных багов и других глюков, особенно я хочу отметить проблеммы с регистрацией контролов в IDE. Так после серьезных изменений в моем контроле, мне приходилось вручную редактировать файлы проекта клиента в С++Builder , так-как система неправильно его редактировала.

Использовать Delphi или Builder – это ваше дело, разницы в быстродействии я не заметил, я использую Builder, так-как я больше всего люблю синтаксис С, но это дело вкуса.

Я перечислил только некоторые из проблемм, с которыми и мне и вам еще придется сталкиваться. Отсутствие взаимопонимания между монстрами – конкурентами иногда подбрасывает нашему брату дополнительную работу.

Плохо ли это?

Каждый раз создавая новою примочку в программе для автоматизации чего-либо я невольно ловлю себя на мысли, что сам рублю сук, на котором сижу. За последние годы Microsoft приложила немалые усилия,  чтобы (как выразился один из моих знакомых) лишить мир большого количества дурной работы. С одной стороны – стандарты – это прогрессивное явление. Но они лишают нас работы – так не надо создавать одну программу под 100 операционных систем, или можно воспользоваться готовым ActiveX вместо большого количества дорогостоящего кода. Осталось только Visual Studio вместе с MS Office в Windows включить. С другой стороны меня не перестает радовать высокий уровень качества их изделий ( вот добавить бы в Delphi стабильность и весь уровень автоматизации его сына VB, хотя в последнем иногда недостает возможностей).

Как бы то ни было, вот несколько тезисов, которые не стоит забывать нам программистам, чтобы оттянуть срок своего увольнения: постарайтесь внушить своему начальству, что по-настоящему профессиональная программа может быть написана только на Visual C++, мотивируя это тем, что VB – это программа для домохозяек. Не используйте чужих ActiveX Controls (а кто его знает, что там понаписывали). Старайтесь использовать в своей программе как можно больше потенциально несовместимых с чем-либо компонентов. Пишите код так, чтобы в следующий раз взглянув на это вы бы сами ничего не поняли (несмотря на коментарии) и.т.д   и.т.п. Не мне вас учить.

Ну вот и подошло к концу мое лирическое отступление. В ближайшем будущем постараюсь порадовать вас новой (обещаю –  очень интересной)  статьей : Быстрое создание ассистента в С++ Builder программе при помощи утилит WinRazor 4.2 SDK.

До встречи!


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua