|
Программирование >> Перегруженные имена функций и идентификаторы
содержит различные оптимизации для базовой платформы, но про особенности конкретных процессоров современности (а это кроме различных вариантов Pentium еще и Cyrix, AMD, все сильно отличающиеся друг от друга по тому, как надо для них оптимизировать) знает крайне мало. Цель проекта PGCC - научить GCC генерировать программы, выжимающие максимум из процессора. (PGCC - это набор патчей к GCC). Последний PGCC - 2.95.3, основан на GCC 2.95.2. Оптимизация дя конкретного процессора производится при указании определенного ключа в командной строке, так что если его не указывать, то мы получаем честный GCC 2.95.2, со всеми его прелестями. А теперь о прелестях применительно к OS/2. Сам компилятор версии 2.95.2 уже вполне неплох. Он параноидален в духе последнего стандарта (предупреждений об ошибках в сравнении с версией EGCS 1.1.2 стало раза в два больше), не падает, генерирует приемлемый код. Смелые могут даже поставить ключ -O6 и попробовать оптимизацию под Pentium (здесь имеется в виду PGCC). Но про нормальную отладку PM-приложений можно сразу же забыть. Нацеленный на это PMGDB, входящий в состав EMX, крайне примитивен, да и порой просто не работает. То же самое с profiling (поддержка заявлена, но виснет намертво, до reset). Проблемы могут явиться сами собой. Короче говоря, будьте готовы к возникновению странных проблем и к дубовой отладке. Компиляторы GCC (C и C++), как уже говорилось выше, можно рекомендовать для переноса программ из Unix под OS/2. Впрочем, как раз в этой области весьма мало вариантов, если не сказать, что как раз один. Можно наоборот, с помощью EMX разрабатывать программы, которые потом будут работать под Unix. Правда, к сожалению, многие функции не поддерживаются EMX. Как минимум, нет очередей сообщений, семафоров, shared memory (ни BSD, ни POSIX). Здесь стоит также заметить, что порты GCC существуют и под win32, и под DOS (а еще вспомним про возможность запуска a.out-программ, сделанных EMX, под DOS и Win32!), так что теоретически с помощью EMX можно писать программы, которые будут компилироваться и работать под OS/2, Unix, DOS и Windows. Главное же достоинство EMX - он абсолютно бесплатен и доступен в исходных текстах. А если вы не верите, что он работает, вот доказательство: такая большая вещь, как XFree86, компилируется с помощью EMX и работает под OS/2! Не говоря о многих других программах меньшего размера. Использование директивы #import Как осуществить на VC создание документа и написать туда пару слов? Возникла следующая проблема - необходимо загрузить документ Excel или Word (вместе с программами - т.е. запускается Word и загружается в него документ) и запустить в нем функцию или макрос на VBA. Имеется файл БД. Необходимо читать и писать (добавлять и изменять) в файл. Как это лучше сделать? Как работать с OLE? Подобные вопросы часто можно встретить в конференциях Fidonet, посвященных программированию на Visual C++. Как правило, после некоторого обсуждения, фидошная общественность приходит к мнению, что лучшее решение - использование директивы #import. Ниже мы попытаемся объяснить то, как работает эта директива и привести несколько примеров её использования. Надеемся, после этого вы тоже найдёте её полезной. Директива #import введена в Visual C++, начиная с версии 5.0. Её основное назначение облегчить подключение и использование интерфейсов COM, описание которых реализовано в библиотеках типов. Библиотека типов представляет собой файл или компонент внутри другого файла, который содержит информацию о типе и свойствах COM объектов. Эти объекты представляют собой, как правило, объекты OLE автоматизации. Программисты, которые пишут на Visual Basic, используют такие объекты, зачастую сами того не замечая. Это связано с тем, что поддержка OLE автоматизации является неотъемлемой частью VB и при этом создаётся иллюзия того, что эти объекты также являются частью Добиться такого же эффекта при работе на C++ невозможно (да и нужно ли?), но можно упростить себе жизнь, используя классы, представляющие обёртки (wrappers) интерфейса IDispatch. Таких классов в библиотеках VC имеется несколько. Первый из них - COleDispatchDriver, входит в состав библиотеки MFC. Для него имеется поддержка со стороны MFC ClassWizardа, диалоговое окно которого содержит кнопку Add Class и далее From a type library. После выбора библиотеки типов и указания интерфейсов, которые мы хотим использовать, будет сгенерирован набор классов, представляющих собой обёртки выбранных нами интерфейсов. К сожалению, ClassWizard не генерирует константы, перечисленные в библиотеке типов, игнорирует некоторые интерфейсы, добавляет к именам свойств префиксы Put и Get и не отслеживает сс1лок на другие библиотеки типов. Второй - CComDispatchDriver является частью библиотеки ATL. В VC нет средств, которые могли бы облегчить работу с этим классом, но у него есть одна особенность - с его помощью можно вызывать методы и свойства объекта не только по ID, но и по их именам, то есть использовать позднее связывание в полном объёме. Третий набор классов - это результат работы директивы #import. Последний способ доступа к объектам OLE Automation является наиболее предпочтительным, так как предоставляет достаточно полный и довольно удобный набор классов. Рассмотрим пример. Создадим IDL-файл, описывающий библиотеку типов. Наш пример будет содержать описание одного перечисляемого типа SamplType и описание одного объекта ISamplObject, который в свою очередь будет содержать одно свойство Prop и один метод Method. import oaidl.idl ; import ocidl.idl ; uuid(37A3AD11-F9CC-11D3-8D3C-0000E8D9FD76), version(I.O), helpstring( Sampl 1.0 Type Library )
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |