bool Registry::Key::HasValue() const
 {
   RefObjQIPtr<IFaces::INamedVariable> Var = Keys.First();
   if (!Var.Get())
     throw RegistryException("Can't get variable");
   RefObjPtr<IFaces::IVariant> Value;
   if (Var->Get(Value.GetPPtr()) != IFaces::retOk)
     throw RegistryException("Can't get value");
   return Value->GetType() != IFaces::IVariant::vtIBase;
 }
 bool Registry::Key::HasChildKeys() const
 {
   RefObjQIPtr<IFaces::INamedVariable> Var = Keys.First();
   if (!Var.Get())
     throw RegistryException("Can't get variable");
   RefObjPtr<IFaces::IVariant> Value;
   if (Var->Get(Value.GetPPtr()) != IFaces::retOk)
     throw RegistryException("Can't get value");
   if (Value->GetType() != IFaces::IVariant::vtIBase)
     return false;
   RefObjPtr<IFaces::IBase> ChildItem;
   if (Value->GetValue(reinterpret_cast<void**>(ChildItem.GetPPtr())) != IFaces::retOk ||
     !RefObjQIPtr<IFaces::IEnum>(ChildItem).Get())
   {
     throw RegistryException("Unknown child item");
   }
   return true;
 }
 const Registry::Key::KeysPoolPtr Registry::Key::GetChildKeys() const
 {
   KeysPoolPtr RetPool(new KeysPool);
   for (RefObjQIPtr<IFaces::INamedVariable> Var = Keys.First() ;
     Var.Get() ; Var = Keys.Next())
   {
     RefObjPtr<IFaces::IVariant> Value;
     if (Var->Get(Value.GetPPtr()) != IFaces::retOk)
       throw RegistryException("Can't get value");
     if (Value->GetType() != IFaces::IVariant::vtIBase)
       throw RegistryException("Unknown child item");
     RefObjPtr<IFaces::IBase> ChildItem;
     if (Value->GetValue(reinterpret_cast<void**>(ChildItem.GetPPtr())) != IFaces::retOk)
       throw RegistryException("Can't get child enum");
     RefObjQIPtr<IFaces::IEnum> Enum(ChildItem);
     if (!Enum.Get())
       throw RegistryException("Unknown child item");
     RetPool->push_back(KeyPtr(new Key(IFacesImpl::IEnumHelper(Enum), Var->GetName())));
   }
   return RetPool;
 }