Современные технологии разработки программного обеспечения. Сивохин А.В - 42 стр.

UptoLike

42
imlementation
function TClassFactory. CreateInstance(unkOuter:IUnknown;
const IID:TGID;varObj): HResult;
var
NewIntfComponentObject:TNewIntfComponentObject;
if(unkOuter < > Nil) then //-если объединение интерфейсов не
//поддерживается
begin
Result:=CLASS_E_NOAGGREGATION
Exit;
end;
try
NewIntfComponentObject:=TNewIntfComponentObject. Create;
try
AddRef;
Result:= NewIntfComponentObject. QueryInterfase(IDD, Obj);
finally
Release;
end;
except
Result:=E_OUTOFMEMORY;
end;
end;
function TClassFactory. LockServer(fLock:Bool):Hresult;
begin
if fLock then
Inc(Global_Object_Count);
else
Dec(Global_Object_Count);
Result:=NOERROR;
end;
Заметим, что использование ключевого слова interfase позволяет
более компактно определять новые интерфейсы. Специальные
классы TComObject и TComObjectFactory сокращают исходный код
сервера, так как при их использовании не надо определять
реализации
методов IUnknown и IClassFactory. В этом случае
определение класса составного объекта должно выглядеть
следующим образом:
TNewIntfComponentObject=class(TComObject,
TComObjectFactory,
INewInterfase)
Определение методов нового интерфейса
imlementation
      function TClassFactory. CreateInstance(unkOuter:IUnknown;
                 const IID:TGID;varObj): HResult;
   var
      NewIntfComponentObject:TNewIntfComponentObject;
   if(unkOuter < > Nil) then     //-если объединение интерфейсов не
                                   //поддерживается
  begin
     Result:=CLASS_E_NOAGGREGATION
     Exit;
  end;
try
   NewIntfComponentObject:=TNewIntfComponentObject. Create;
try
    AddRef;
    Result:= NewIntfComponentObject. QueryInterfase(IDD, Obj);
  finally
     Release;
   end;
      except
          Result:=E_OUTOFMEMORY;
      end;
end;
function TClassFactory. LockServer(fLock:Bool):Hresult;
   begin
        if fLock then
             Inc(Global_Object_Count);
        else
             Dec(Global_Object_Count);
             Result:=NOERROR;
   end;
Заметим, что использование ключевого слова interfase позволяет
более компактно определять новые интерфейсы.              Специальные
классы TComObject и TComObjectFactory сокращают исходный код
сервера, так как при их использовании не надо определять
реализации методов IUnknown и IClassFactory. В этом случае
определение класса составного объекта должно выглядеть
следующим образом:
     TNewIntfComponentObject=class(TComObject,
TComObjectFactory,
       INewInterfase)
           Определение методов нового интерфейса
                                 42