Контрольная работа: Распределенная обработка данных

// Создать компонент

IUnknown* pIUnknown = CreateInstance();

// Получить интерфейс IX

IX* pIX = NULL;

HRESULT hr = pIUnknown->QueryInterface(IID_IX, (void**)&pIX);

// Завершить работу с IUnknown

pIUnknown->Release();

// Использовать IX, если он был получен успешно

if (SUCCEEDED(hr))

{

pIX->Fx(); // Использовать интерфейс IX

pIX->Release(); // Завершить работу с IX

}

Легко забыть, что всякий раз, когда Вы копируете указатель на интерфейс, надо увеличить его счетчик ссылок. В приведенном далее фрагменте кода делается еще одна ссылка на интерфейс IX. В общем случае необходимо увеличивать счетчик ссылок всякий раз, когда создается копия указателя на интерфейс, о чем говорит приведенное выше правило 3.

// Создать компонент

IUnknown* pIUnknown = CreateInstance();

IX* pIX = NULL;

HRESULT hr = pIUnknown->QueryInterface(IID_IX, (void**)&pIX);

pIUnknown->Release();

if (SUCCEEDED(hr))

{

pIX->Fx(); // Использовать интерфейс IX

IX* pIX2 = pIX; // Создать копию pIX

pIX2->AddRef(); // Увеличить счетчик ссылок

pIX2->Fx(); // Что-то делать при помощи pIX2

pIX2->Release(); // Завершить работу с pIX2

pIX->Release(); // Завершить работу с pIX

}

Клиент сообщает компоненту о своем желании использовать интерфейс, когда вызывается

К-во Просмотров: 514
Бесплатно скачать Контрольная работа: Распределенная обработка данных