MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Информатика, программирование -> Оформление класса в виде COM объекта в C++

Название:Оформление класса в виде COM объекта в C++
Просмотров:107
Раздел:Информатика, программирование
Ссылка:Скачать(5 KB)
Описание:Допустим у вас есть некоторое приложение, написанное на C++(VC++ если быть корректным). Как оно у вас появилось не суть важно, может быть это ваша старая разработка, может быть вы решили сначала отладить предметную часть.

Самые свежие новости со всего мира. Мы работаем для вас 24 часа в сутки.
www.24da.ru
Регистрация доменов RU, SU от 400 рублей. Прогрессивные скидки.
www.direg.ru

Часть полного текста документа:

Оформление класса в виде COM объекта в C++
    Оформление класса в виде COM объекта.
    Допустим у вас есть некоторое приложение, написанное на C++(VC++ если быть корректным). Как оно у вас появилось не суть важно, может быть это ваша старая разработка, может быть вы решили сначала отладить предметную часть. Важно то что вы горите желанием вынести часть классов в объектные модули и оформить их в виде ActiveX, COM и ATL объектов. Есть несколько типовых проблем связанных с таким переносом.
    Множественные конструкторы.
    class MyCOM
    {
    MyCOM();
    MyCOM(long id);
    MyCOM(long id,LPCSTR Name);
    :
    }
    Знакомо и очень удобно, но в COM правила создания объекта строго определены и ни одна из функции для созданий объектов не позволяет передавать параметры конструктору класса.
    Настройку объекта придется вынести в отдельный метод например Init.
    // IMyCOM cтандартная обертка наследник от COleDispatchDriver
    IMyCOM * d=new IMyCOM;
    COleException pErr;
    CString SSS="Mylib.MyCOM";
    d->CreateDispatch( SSS,&pErr);
    d->Init(15,"Матрица"); // Инициализируем
    В принципе вы можете создать свою фабрику объектов. Это позволит создавать объекты вот так.
    IMyOF * d=new IMyOF;
    COleException pErr;
    CString SSS="MyLib.MyOF";
    d->CreateDispatch( SSS,&pErr);
    IMyCOM Ob1(d->CraeteEmpty());
    IMyCOM Ob2(d->CraeteId(15));
    IMyCOM Ob3(d->CraeteFull(15,SSS ));
    Но зачем вам лишний промежуточный объект если можно обойтись без него.
    Перегруженные методы.
    class MyCOM
    {
    :
    LPCSTR GetMyRec(long id);
    LPCSTR GetMyRec(LPCSTR Name);
    AddRec ();
    AddRec (long id);
    AddRec (long id, LPCSTR Name);
    :.
    }
    Это вполне законный код С++, но COM не разрешит вам в интерфейсе объявить два метода с одним именем. Это противоречит концепции.
    Решение
    Можно связать функции с разными методами интерфейса для этого в odl пишим
    [id(1)] BSTR AddRecName(BSTR ID);
    [id(2)] BSTR AddRecID(long ID);
    а в cpp осуществляем привязку.
    BEGIN_DISPATCH_MAP(:.)
    DISP_FUNCTION(CPSDG, "AddRecName", AddRec, VTS_BSTR, VTS_BSTR)
    DISP_FUNCTION(CPSDG, "AddRecId", AddRec, VTS_BSTR, VTS_I2)
    DISP_FUNCTION_ID(:.)
    END_DISPATCH_MAP()
    Можно написать прокси функции. Например для GetMyRec прототип может выглядеть так
    LPCSTR GetMyRec (VARIANT id)
    {
    switch id.vt
    {case VT_I4: { return GetMyRec(id.lVal); }
    case VT_BSTR: { return GetMyRec(id.bstrVal); }
    }
    return S_OK;
    }
    Для функции AddRec можно сделать вот так
    HRESULT AddRec (VARIANT id, VARIANT Name)
    {
    if ((id.vt==VT_EMPTY)&&(Name.vt==VT_EMPTY))
    {AddRec() ; return S_OK;}
    if ((id.vt==VT_I4)&&(Name.vt==VT_EMPTY))
    {AddRec(id.lVal) ; return S_OK;}
    if ((id.vt==VT_I4)&&(Name.vt== VT_BSTR))
    {AddRec(id.lVal, Name. bstrVal ) ; return S_OK;}
    :
    }
    Этого вполне достаточно, но можно еще изменить объявление метода интерфейса в odl вот так
    HRESULT Add(VARIANT [optional, in]id, [optional,in]VARIANT S);
    это позволит вызывать метод , более красиво.
    Пример на VB
    MyObject.Add // Любой из вариантов должен работать
    MyObject.Add 15
    MyObject.Add 15, "Var"
    Пользовательские типы данных
    В сложном проекте полно собственных констант, структур, множеств используемых в качестве параметров . ............




Нет комментариев.



Оставить комментарий:

Ваше Имя:
Email:
Антибот:  
Ваш комментарий:  



Похожие работы:

Название:Работа с графическими объектами в 3ds max
Просмотров:157
Описание: Глава 1. Изучая карту дорог   Когда вы начнете свободно ориентироваться в 3ds max, перед вами откроется удивительный мир. С помощью только одной этой программы можно создавать любые эффекты для "крутых" го

Название:Системный анализ объекта
Просмотров:215
Описание: Федеральное агентство по образованию Государственное образовательное учреждение Высшего профессионального образования Северо-Западный государственный заочный технический университет Институт управле

Название:Методы проектного анализа по этапам жизненного цикла объекта недвижимости
Просмотров:148
Описание: Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования «Читинский государственный университет» (ЧитГУ) Институт строительства и экологии

 
     

Вечно с вами © MaterStudiorum.ru

.