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


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




 32 - Дальше создаем клиента / ActiveX по шагам / Приложение

Шаг 32 - Дальше создаем клиента

Теперь нам нужно создать объект. Вот так.

IUnknown* pUnk;
hr = pCF->CreateInstance( NULL, IID_IUnknown, (void**) &pUnk );
pCF->Release();
if ( FAILED( hr ))
{
	cout << "Failed to create server instance " << endl;
	return ;
}
cout << "Instance created" << endl;

Обратите внимание, что для создания объекта мы используем функции фабрики классов. Мы сами описывали в этой функции процесс создания класса. Помните ?? Ну там new используется.

Ну вот и настал момент когда мы можем получить доступ к интерфейсу. Для этого нужно его описание и его IDD, я просто скопировал код описания из проекта сервера, но можно подключить и H файл с описанием интерфейса, но это на любителя. Для нормального проекта нужно конечно подключать заголовочный файл на случай изменений. Ну Вы меня простите. Упрощаю как могу.

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

DEFINE_GUID(IID_Step, 
0x3f5942e2, 0x108b, 0x11d4, 0xb0, 0x50, 0x0, 0x0, 0x1, 0x26, 0x6, 0x96);


class IStep : public IUnknown  
{
public:
	IStep();
	virtual ~IStep();
	STDMETHOD(MyComMessage) ()  PURE;
};

void main()
......

Вот так. А теперь мы можем и интерфейс попросить :-)

IStep* pStep = NULL;

hr = pUnk->QueryInterface( IID_Step, (void**) &pStep);
pUnk->Release();
if ( FAILED( hr ))
{
	cout << "QueryInterface() for IStep failed" << endl;
	CoUninitialize();
	return;
}

Как видите мы запрашиваем интерфейс и получаем указатель на наш класс. Теперь можно и методы вызывать.

pStep->MyComMessage();
pStep->Release();
cout << "Shuting down COM" << endl;
CoUninitialize();

Вот можно запускать. Функция должна вызваться. У меня работает. Если не получается смотрите проект.

Проще я уже не смогу наверно придумать :-))). Но в этих шагах самые базовые понятие о COM основе OLE, DCOM, ActiveX есть всякие классы и, например, ATL облегчающие работу. Но понимать, что происходит за всем этим тоже интересно. Правда ???


Загрузить проект | | |
Автор Каев Артем.
[AD]