Вход/Регистрация
Интернет-журнал "Домашняя лаборатория", 2007 №6
вернуться

Журнал «Домашняя лаборатория»

Шрифт:

//////////////////////////////////////////////////

// СоJournal.h: заголовочный файл для класс СоJournal.

//////////////////////////////////////////////////

#ifndef _CoJournal_

#define _CoJournal_

#include "IJournal.h"

#include "iid.h"

class CoJournal:

public IJournal

{

public:

CoJournal ;

virtual ~CoJournal;

// IUnknown

STDMETHODIMP Querylnterface(REFIID riid, void** pIFace);

STDMETHODIMP_(ULONG) AddRef;

STDMETHODIMP_(ULONG) Release;

// IPub

STDMETHOD(SetTitle)(BSTR bstrTitle);

STDMETHOD(SetYear)(int nYear);

STDMETHOD(Getlnfo)(BSTR* pbstrlnfo);

// IJournal

STDMETHOD(SetNumber)(int nNumber);

private:

ULONG m_refCount; // Счетчик ссылок

BSTR m_bstrTitle; // Название публикации

int m_nYear; // Год публикации

int m nNumber; // Номер журнала

};

#endif

И теперь реализация класса CоJournal

//////////////////////////////////////////////////

// СоJournal.cpp: реализация класса CoJournal.

//////////////////////////////////////////////////

#include <stdio.h>

#include "CoJournal.h"

#include <stdio.h>

#include "CoJournal.h"

extern ULONG g_objCount; // Счетчик числа объектов

//////////////////////////////////////////////////

// Конструктор и деструктор

//////////////////////////////////////////////////

CoJournal::CoJournal

{

m_refCount = 0;

++g_obj Count;

m_bstrTitle = SysAllocString(L"");

}

CoJournal::~CoJournal

{

– - g_objCount;

if(m_b strTitle)

SysFreeString(m_bstrTitle);

}

// IUnknown

STDMETHODIMP_(ULONG) CoJournal::AddRef

{

return ++m_refCount;

}

STDMETHODIMP_(ULONG) CoJournal::Release

{

if (--m_refCount == 0)

{

delete this;

return 0;

}

else

return m_refCount;

}

STDMETHODIMP CoJournal::Querylnterface(REFIID riid, void** pIFace)

{

if (riid == IID_IUnknown)

{

*pIFace = (IUnknown*)this;

}

else if (riid == IID_IJournal)

{

*pIFace = (IJournal*)this;

}

else

{

*pIFace = NULL; return E_ NOINTERFACE;

}

((IUnknown*)(*pIFace)) — > AddRef;

return S_OK;

}

// IPub & IJournal

STDMETHODIMP CoJournal::SetTitle (BSTR bstrTitle)

{

SysReAllocString(&m_bstrTitle, bstrTitle);

return S_OK;

}

STDMETHODIMP CoJournal::SetYear(int nYear)

{

m_nYear = nYear;

return S_OK;

}

STDMETHODIMP CoJournal::SetNumber(int nNumber)

{

m_nNumber = nNumber;

return S_OK;

}

STDMETHODIMP CoJournal::GetInfo(BSTR *pbstrInfo)

{

char* pszTitle = NULL;

char* pszText = NULL;

int nTitleLength;

nTitleLength = SysStringLen(m_bstrTitle);

pszTitle = (char*)malloc(2*nTitleLength);

pszText = (char*)malloc(2*nTitleLength + 50);

wcstombs(pszTitle, m_bstrTitle, 2*nTitleLength);

sprintf(pszText, "Journal\n\nTitle: %s\nYear: %d\nNumber: %d\n", pszTitle, m_nYear, m_nNumber);

*pbstrInfo = SysAllocStringLen(NULL, 2*strlen(pszText));

mbstowcs(*pbstrlnfo, pszText, 2*strlen(pszText));

free(pszTitle);

free(pszText);

return S_OK;

}

Теперь, когда коклассы CoBook и CоJournal реализованы, им следует присвовить GUID и добавить соответствующую информацию в файл iid.h. Вот последняя версия этого файла

// GUID для всех интерфейсов и классов

  • Читать дальше
  • 1
  • ...
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: