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


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




 24 - Создаем DLL / ActiveX по шагам / Приложение

Шаг 24 - Создаем DLL

Хочу Вас предупредить, что стартовых действий для COM слишком много и я постараюсь разбить это на шаги как только возможно. Итак, создаем новый проект, как Win 32 Dinamic-Link Library и давайте дадим ему имя MyCom. Дальше на выбор о типе создаваемого проекта давайте дадим имя An empty DLL project, что означает пустой проект. Файлы мы добавим сами. Дальше Finish и после этого у нас есть пустой проект без файлов и классов.

Давайте добавим в проект файл MyCOM.cpp и создадим болванку для загрузки и использования COM

#include  "windows.h"

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

STDAPI DllCanUnloadNow(void)
{
       return S_OK;
}

Функция DllGetClassObject извлекает класс из DLL и для использования COM она нужна, именно к ней будет происходить обращение при вызове другой функции CoGetClassObject, но уже у клиента. Общее её описание вот такое.

STDAPI DllGetClassObject
(  
	REFCLSID rclsid,  // Уникальный идентификатор объекта
	REFIID riid,      // Ссылка на интерфейс связанный с объектом
	LPVOID * ppv      // адрес переменной которая получит инфтерфейс
);

Обычно запрашивают IID_IClassFactory, чтобы создать объект. Эта функция может вернуть два значения либо S_OK либо CLASS_E_CLASSNOTAVAILABLE, если класс не поддерживается. В случае если произошли ошибки при создании класса, то результат возврата может быть такой.

E_INVALIDARG
E_OUTOFMEMORY 
E_UNEXPECTED

В этой функции должно быть написанно примерно следующее. Создать новый объект на основе класса порожденного от ICLassFactory, запросить у него интерфейс (QueryInterface), обработать все ошибки.

Вот, но мы не сможем реализовать эту функцию пока у нас не будет класса порожденного от IClassFactory. Мы его сделаем попозже. А пока идея в том, что эта функция создает объект и передает его интерфейс.

Вторая функция у нас DllCanUnloadNow. Эта функция ответственна за выгрузку DLL из памяти. У неё всего два кода возврата.

S_OK 
S_FALSE 

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