Учебник по Visual C++ .Net


Использование макросов COM Разработчики


MY_COSAY_HEADER

#pragma once

#include "MyComTLib_h.h" class CoSay : public ISay

//====== Класс, реализующий интерфейсы ISay, lUnknown

public: CoSay (') ;

virtual -CoSay();

// lUnknown

STDMETHODIMP QuerylnterfacefREFIID riid, void** ppv);

STDMETHODIMP_(ULONG) AddRef();

STDMETHODIMP_(ULONG) Release();

// ISay

STDMETHODIMP Say();

STDMETHODIMP SetWord (BSTR word);

private:

//====== Счетчик числа пользователей классом

ULONG m_ref;

//====== Текст, выводимый в окно

BSTR m_word;

};

//====== Фабрика классов СОМ DLL-сервера

class CoSayFactory : public IClassFactory

{

public:

CoSayFactory();

virtual ~CoSayFactory();

// lUnknown

STDMETHODIMP QueryInterface(REFIID riid, void** ppv) ;

STDMETHODIMP_(ULONG) AddRef();

STDMETHODIMP_(ULONG) Release();

// IClassFactory

STDMETHODIMP Createlnstance(LPUNKNOWN pUnk,

REFIID riid, void** ppv);

STDMETHODIMP LockServer(BOOL bLock);

private:

ULONG m_ref; };

#endif

Теперь перейдите к файлу MyCom.cpp и произведите замены в соответствии с текстом, приведенным ниже:

#include "MyComTLib_i.c"

#include "MyCom.h"

//====== Произвольный ограничитель длины строк

#define MAX_LENGTH 128

//====== Счетчик числа блокировок DLL

ULONG gLockCount;

//====== Счетчик числа пользователей СОМ-объектами

ULONG gObjCount;

CoSay::CoSay()

{

//=== Обнуляем счетчик числа пользователей класса,

//=== так как интерфейс пока не используется

m_ref = 0;

//=== Динамически создаем строку текста по умолчанию

m_word = SysAllocString(L"This is MyComTLib speaking");

gObjCount++;

}

CoSay::-CoSay()

{

//====== при завершении работы освобождаем память

if (m_word)

SysFreeString(m_word);

gObjCount—;

}

//====== Реализация методов lUnknown

STDMETHODIMP CoSay::QueryInterface(REFIID riid, void** ppv)

{

// Стандартная логика работы с клиентом

// Поддерживаем только два интерфейса

//====== Реализация lUnknown *ppv = 0;

if (riid==IID_IUnknown)




Начало  Назад  Вперед



Книжный магазин