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 руб./мес


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




 25 - Создаем класс фабрики классов / ActiveX по шагам / Приложение

Шаг 25 - Создаем класс фабрики классов

Давайте создадим новый класс CClassFactory. Создавайте через New Class. В результате у Вас будут созданны два файла

ClassFactory.h
ClassFactory.cpp
Описание класса необходимо изменить, чтобы он унаследовал интерфейс IClassFactory
#include "ole2.h"

class CClassFactory  : public IClassFactory
{
public:
	CClassFactory();
	virtual ~CClassFactory();
};

Вот теперь, чтобы использовать наш класс надо подключить описание его в файл CPP самой библиотеки. Теперь мы можем попробовать объвить ссылку на класс фабрики классов.

STDAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void** ppv )
{
	CClassFactory *cf;
	cf=new CClassFactory;
        return S_OK;
}

Так вот, если Вы напишите вот так, а это написано правильно, то получите кучу сообщений об ошибках. И правильно, сообщения примерно такие.

D:\PROJECT\MyCom\mycom.cpp(8) : warning C4259: 'long __stdcall IUnknown::QueryInterface(const struct _GUID &,void ** )' : pure virtual function was not defined
        e:\microsoft visual studio\vc98\include\unknwn.h(109) : see declaration of 'QueryInterface'
D:\PROJECT\MyCom\mycom.cpp(8) : warning C4259: 'unsigned long __stdcall IUnknown::AddRef(void)' : pure virtual function was not defined
        e:\microsoft visual studio\vc98\include\unknwn.h(113) : see declaration of 'AddRef'

Дествительно, реализация этих функций необходима. И мы должны были её сделать. Давайте объявим эти функции в классе. Эти объявления должны быть Вам хоть немного знакомы.

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

Заметили, что методы есть и интерфейса IUnknown ? Хотя он не упоминается ? Нет упоминается. Фабрика классов наследуется от IUnknown из определения интерфейса:

MIDL_INTERFACE("00000001-0000-0000-C000-000000000046")
    IClassFactory : public IUnknown
    {
    public:
......

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