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


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

Название:Оформление класса в виде COM объекта в C++
Просмотров:60
Раздел:Информатика, программирование
Ссылка:none(0 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);
    это позволит вызывать метод , более красиво. ............






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

Название:Для вычетов НДС необходима связь с объектами налогообложения, в том числе и прошлых периодов
Просмотров:679
Описание: Александр Медведев, Член научно-экспертного совета палаты налоговых консультантов, к.э.н. Согласно п. 2 ст. 171 НК РФ вычетам подлежат суммы НДС в отношении товаров (работ, услуг), а также имущественных прав, приобрет

Название:Введение в культуру нового энтомологического объекта Phthorimaea operculella Zeller (Lepidoptera Gelechiidae)
Просмотров:443
Описание: Бакланова О.В., Лаппа Н.В., Чайка В.Н. Картофельная моль с 1980 года - новый карантинный объект, ареал которого в южной части СССР постепенно расширяется. Этот вредитель пасленовых культур является поливольтинным вид

Название:Организация надзора за объектами, введенными в эксплуатацию
Просмотров:672
Описание: ГЛАВНОЕ УПРАВЛЕНИЕ МЧС РОССИИ ПО КУРГАНСКОЙ ОБЛАСТИ УПРАВЛЕНИЕ ГОСУДАРСТВЕННОГО ПОЖАРНОГО НАДЗОРА ОТДЕЛ ГОСУДАРСТВЕННОГО ПОЖАРНОГО НАДЗОРА ПО ГОРОДУ ШАДРИНСКУ РЕФЕРАТ Тема: «Организация надз

Название:Формирование экологической культуры у детей среднего дошкольного возраста в процессе наблюдения за объектами живой природы
Просмотров:380
Описание: Формирование экологической культуры у детей среднего дошкольного возраста в процессе наблюдения за объектами живой природы Введение Берегите эти воды, эти земли. Даже мал

Название:Оценка эффективности использования объекта недвижимости
Просмотров:187
Описание: Министерство образования и науки Российской Федерации Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования «СИБИРСКАЯ ГОСУДАРСТВЕНН

 
     

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