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 добавили в клиенте, чтобы обозначить окончаниеработы с различными интерфейсами. Ликвидировали компонент с помощью деструктора.