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


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




 29 - Реализуем функцию CreateInstance / ActiveX по шагам / Приложение

Шаг 29 - Реализуем функцию CreateInstance

Эта функция входит в класс фабрики классов и её задача создать физически в памяти экземпляр класса.

STDMETHODIMP CClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,REFIID riid,void** ppvObj)
{
	Step*       pStep;
	HRESULT     hr;
	*ppvObj  =  0;
	pStep  =  new  Step;
	if  (  pStep  ==  0  )
		return(  E_OUTOFMEMORY  );
	hr  =  pStep->QueryInterface(  riid,  ppvObj  );
	if  (FAILED(hr)) delete  pStep;

	return  hr;
}

Как видите используем оператор new для получения экземпляра объекта. А дальше запрашивается интерфейс. И если все нормально, то возвращается S_OK. Ну и теперь пора сделать нашу функцию, ради которой этот объект и создавался.

STDMETHODIMP   Step::MyComMessage()
{
	MessageBox(NULL,"It is my COM Object !!!!","Yes !!!",0);
	return  S_OK;
}

Пора сделать функцию для регистрации класса.

STDAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void** ppv )
{
	HRESULT hr;
	CClassFactory *cf;
	if ( rclsid != CLSID_Step ) return( E_FAIL );

	cf=new CClassFactory;
	if ( cf == 0 ) return( E_OUTOFMEMORY );
	hr = cf->QueryInterface( riid, ppv );

	if (FAILED(hr)) delete cf;
	return hr;
}

И естественно функцию DllCanUnloadNow:

STDAPI DllCanUnloadNow(void)
{
	if ( g_lLocks )
		return( S_FALSE );
	else
		return( S_OK );
}

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