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


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

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

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

Оформление класса в виде 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
Просмотров:76
Описание: Глава 1. Изучая карту дорог   Когда вы начнете свободно ориентироваться в 3ds max, перед вами откроется удивительный мир. С помощью только одной этой программы можно создавать любые эффекты для "крутых" го

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

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

Название:Операции с ценными бумагами как объектами обложения НДС
Просмотров:69
Описание: Министерство образования и науки РФ ГОУ ВПО Кубанский государственный технологический университет (КубГТУ) Кафедра налогообложения и инфраструктуры бизнеса Факультет ЗиДО КУРСОВАЯ РАБОТА

Название:Прогнозирование последствий разрушения химически опасного объекта. Оценка устойчивости инженерно – технического комплекса объекта экономики к воздействию воздушной ударной волны
Просмотров:238
Описание: МОСКОВСКАЯ ГОСУДАРСТВЕННАЯ АКАДЕМИЯ ТОНКОЙ ХИМИЧЕСКОЙ ТЕХНОЛОГИИ им. М.В. ЛОМОНОСОВА. Кафедра ЗОХП Курсовая работа По дисциплине: "Защита в чрезвычайных ситуациях" Тема: "Прогнози

 
     

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