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


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




 31 - Создаем клиента / ActiveX по шагам / Приложение

Шаг 31 - Создаем клиента

Итак, наша задача создать клиента, который сможет использовать наш COM объект. Создаем приложение как Win Console Application и давайте дадим ему имя MyComClient. Вы удивлены ??? А зря. Это вполне нормальное приложение, только без графического интерфейса. Но это не важно сейчас, зато всё остальное работает. Создавайте, как пустой проект. Добавьте файл MyComClient.cpp.

Первое, что мы должны сделать это инициализировать COM. Вот так:

#include "windows.h"
#include "iostream.h"

void main()
{
	cout  <<  "Initializing  COM"  <<  endl;
	if  (  FAILED(  CoInitialize(  NULL  ))) 
	{
		cout << "Unable to initialize COM" << endl;
		return ;
	}
}

Функция инициализации выглядит так.

HRESULT CoInitialize
( 
	LPVOID pvReserved  // Зарезервировано, должно быть нулем
);

Эта функция обладает рядом ограничений. Во-первых она не позволяет использовать все возможности OLE, а обеспечивает только COM. Ведь Вы помните, что COM это не OLE. COM - это фундамент, на котором строится OLE. Эту функцию можно воспринимать как инициализацию механизмов работы с COM для вашего приложения.

Теперь основываясь на имени компоненты нужно получить её CLSID. В имени указана и версия. Сделать это можно так.

CLSID clsid;
HRESULT hr = ::CLSIDFromProgID( L"My.Component.1", &clsid );

if ( FAILED( hr ))
{
	cout << "Unable to get CLSID " << endl;
	return ;
}

Что это за функция ??? Вот она.

HRESULT CLSIDFromProgID
(  
	LPCOLESTR lpszProgID,  // имя компонента
	LPCLSID pclsid         // сюда вернется уникальный идентификатор
);

Настало время соединиться с объектом. Делается это вот так.

IClassFactory* pCF;
hr = CoGetClassObject( clsid, CLSCTX_INPROC, NULL,IID_IClassFactory, (void**) &pCF );
if ( FAILED( hr ))
{
	cout << "Failed to GetClassObject "   << endl;
	return ;
}

Применяемая нами функция CoGetClassObject производит соединение с заданным объектом. Мы с помощью этой функции получаем доступ к интерфейсу фабрики класса IID_IClassFactory, которая сможет создать объект сама. Мы первым параметром указали идентификатор CLSID эта функция найдет по нему DLL используя запись в реестре InprocServer32.

Скомпилируйте и запустите. До данного момента должно выполняться всё без ошибок. Это будет говорить о том, что соединение с нашим сервером в принципе возмножно.


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