Смекни!
smekni.com

Распределенная обработка данных (стр. 3 из 3)

IUnknown*pIUnknown = CreateInstance();

trace("Client:Polychit' Interface IX");

IX* pIX =NULL;

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

if(SUCCEEDED(hr))

{

trace("Client:IX polychen");

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

pIX->Release();

}

trace("Client:Polychit' Interface IY");

IY* pIY =NULL;

hr =pIUnknown->QueryInterface(IID_IY, (void**)&pIY);

if(SUCCEEDED(hr))

{

trace("Client:IY polychen");

pIY->Fy(); // Использоватьинтерфейс IY

pIY->Release();

}

trace("Client:Zaprosit' nepodderjivaemue Interface");

IZ* pIZ =NULL;

hr =pIUnknown->QueryInterface(IID_IZ, (void**)&pIZ);

if(SUCCEEDED(hr))

{

trace("Client:Interface IZ polychen");

pIZ->Fz();

pIZ->Release();

}

else

{

trace("Client:No! Interface IZ");

}

trace("Client:Osvobodit' Interface IUnknown");

pIUnknown->Release();

getch();

return 0;

}

 


Результат работыпрограммы:

 

Вывод:

В этомзадании мы добавили подсчет ссылок. Для этого к компоненту добавили реализациюдвух методов IUnknown – AddRef и Release, используя функции Win32 InterlockedIncrement и InterlockedDecrement. Функцию AddRef вызывают CreateInstance и QueryInterface для соответствующихуказателей на интерфейсы. Вызовы Release добавили в клиенте, чтобы обозначить окончаниеработы с различными интерфейсами. Ликвидировали компонент с помощью деструктора.