Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Професиональное программирование


Информационный Канал Subscribe.Ru

Здравствуйте уважаемые подписчики!

Нашему полку авторов, прибыло. Представляем ProfSD которого вы всегда можете застать на нашем форуме.

Оформление класса в виде COM объекта

Допустим у вас есть некоторое приложение, написанное на C++(VC++ если быть корректным). Как оно у вас появилось не суть важно, может быть это ваша старая разработка, может быть вы решили сначала отладить предметную часть. Важно то что вы горите желанием вынести часть классов в объектные модули и оформить их в виде ActiveX, COM и ATL объектов. Есть несколько типовых проблем связанных с таким переносом.

Оформление класса в виде COM объекта.

Множественные конструкторы.
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 не разрешит вам в интерфейсе объявить два метода с одним именем. Это противоречит концепции.


Статья целиком

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное