Контрольная работа: Распределенная обработка данных
IUnknown * CreateInstance( )
Реализация функции CreateInstance:
IUnknown * pI = static_cast<IX*>(new CA) ;
PI->Addref( ) ;
Return pI ;
Использование QueryInterface.
Предположим, что у нас есть указатель на IUnknown, pI. Чтобы определить, можно ли использовать некоторый другой интерфейс, мы вызываем QueryInterface, передавая ей идентификатор нужного нам интерфейса. Если QueryInterface отработала успешно, мы можем пользоваться указателем:
void foo(IUnknown* pI)
{
// Определить указатель на интерфейс
IX* pIX=NULL;
// Запросить интерфейс IX
HREZULT hr = pI-> QueryInterface(IID_IX, (void**)&pIX) ;
// Проверить значение результата
if (SUCCEEDED(hr))
{
// Использовать интерфейс
pIXFx( ) ;
}
}
Реализация QueryInterface.
Запишем QueryInterface для следующего компонента, реализуемого классом CA:
Interface IX : IUnknown { /*…*/ } ;
Interface IY : IUnknown { /*…*/ } ;
Class CA : public IX, public IY { /*…*/ } ;
Следующий фрагмент кода реализует QueryInterface для класса, приведенного выше фрагмента кода.
HREZULT --stdcall CA:: QueryInterface( const IID&iid, void * * ppv);
{
if (iid ==IID_IUnknown)