C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 22 - Минимальный набор действий для использования COM / ActiveX по шагам / Приложение

Шаг 22 - Минимальный набор действий для использования COM

Итак, объект COM можно поместить в DLL или EXE, мы с Вами поместим его в DLL. Итак в минимальном виде нам нужен проект DLL, в котором должны быть реализованы две функции:

DllGetClassObject    
DllCanUnloadNow      
Эти имена функций не просто придуманы. Они входят в понятие COM API есть набор функций, которые позволяют использовать COM. Например, DllGetClassObject извлекает объект, то есть дает к нему доступ. Набор функций связанных с COM называют библиотекой COM.

В самом DLL необходимо реализовать классы, которые наследуют необходимые интерфейсы и их реализуют. О некоторых из них я рассказал в предыдущих шагах. Для примера вот такой

class  MathClassFactory  :  public  IClassFactory
{
protected:
    long        m_lRef;
public:    
	MathClassFactory();    
	~MathClassFactory();
	//  IUnknown
	STDMETHOD(  QueryInterface(REFIID,  void**  ));
	STDMETHOD_(ULONG,  AddRef());    
	STDMETHOD_(ULONG,  Release());
	//  IClassFactory
	STDMETHOD(CreateInstance)(LPUNKNOWN,  REFIID,  void**);
	STDMETHOD(LockServer)(BOOL);
};

Так необходимо зарегистрировать компонент. Это можно сделать в простом случае с использованием REG файла. Например такого:

REGEDIT
HKEY_CLASSES_ROOT\Chapter2.Math.1       = Chapter2 Math Component
HKEY_CLASSES_ROOT\Chapter2.Math.1\CLSID = {A888F560-58E4-11d0-A68A-0000837E3100}
HKEY_CLASSES_ROOT\Chapter2.Math         = Chapter2 Math Component
HKEY_CLASSES_ROOT\Chapter2.Math\CurVer  = Chapter2.Math.1
HKEY_CLASSES_ROOT\Chapter2.Math\CLSID   = {A888F560-58E4-11d0-A68A-0000837E3100}
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100} =  Chapter2 Math Component
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\ProgID = Chapter2.Math.1
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\VersionIndependentProgID = Chapter2.Math
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\InprocServer32 = D:\PROJECT\server\Debug\server.dll

Вот теперь объект COM в минимальной реализации готов. Для его использования нужен клиент. Клиент будет пользоваться функциями.

CLSIDFromProgID
CoGetClassObject

Вот так. Давайте еще раз сформулируем.

Класс с наследованием и реализацитей интерфейсов IUnknown, ICLassFactory etc ....
Правильно оформленный DLL с функцией DllGetClassObject 
Регистрация компонента  с использованием реестра и REG файла

Если всё это есть, то на C++ мы сможем реализовать клиента COM объекта.


| |
Автор Каев Артем.
[AD]