Класс Pzl: различия между версиями

Материал из wikiru.visual-prolog.com

Строка 1: Строка 1:
=Назначение=
=Назначение=
Класс pzl предназначен для обеспечения работы с pzl-компонентами и получения информации о состоянии pzl-системы. Этот класс обязательно должен включаться в проект любой pzl-компоненты и главного приложения, генерирующего исполняемый (.EXE) файл, даже если нет необходимости обращения к предикатам этого класса.
Класс pzl предназначен для обеспечения работы с pzl-компонентами и получения информации о состоянии pzl-системы. Этот класс обязательно должен включаться в проект любого pzl-контейнера и главного приложения, генерирующего исполняемый (.EXE) файл, даже если нет необходимости обращения к предикатам этого класса.
 
Обращения к предикатам этого класса возможны из любого класса, включенного в проект, использующий pzl-технологию.


Имплементация класса pzl содержится:  
Имплементация класса pzl содержится:  
Строка 8: Строка 6:
*в случае главного приложения в библиотеке pzlPort_XX.lib
*в случае главного приложения в библиотеке pzlPort_XX.lib
здесь YY и XX - уровень лицензии.
здесь YY и XX - уровень лицензии.
Обращения к предикатам этого класса возможны из любого класса, включенного в проект, использующий pzl-технологию.


=Список доменов=
=Список доменов=
Строка 13: Строка 13:
|-
|-
|pzlComponentsRegisterFileName_D
|pzlComponentsRegisterFileName_D
|Информация об используемом файле регистрации компонент
|Состояние файла-реестра компонент данного приложения
|-
|-
|pzlContainerContentInfo_D
|pzlContainerContentInfo_D
Строка 23: Строка 23:


=Описание доменов=
=Описание доменов=
pzlDomains::pzlComponentsRegisterFileName_D
==pzlDomains::pzlComponentsRegisterFileName_D==
Состояние файла-реестра компонент
<vip>pzlComponentsRegisterFileName_D=
  pzlRegistryFileName(string FileName);
  pzlRegistryFileNameWronglyDefined;
  pzlRegistryFileNameNotInUse.</vip>
Определяет одно из состояний назначения файла-реестра компонент для данного приложения.
<vip>pzlRegistryFileName(string FileName)
назначен файл с именем FileName.</vip>
<vip>pzlRegistryFileNameWronglyDefined
файл-реестр неправильно определен, возможно, отсутствовал на момент назначения.</vip>
<vip>pzlRegistryFileNameNotInUse
файл-реестр к данному моменту не назначался, то есть не используется.</vip>


pzlDomains::pzlContainerContentInfo_D
==pzlDomains::pzlContainerContentInfo_D==


pzlDomains::entityUID_D
pzlDomains::entityUID_D
<vip>
<vip>
domains
domains
    pzlComponentsRegisterFileName_D=
        pzlRegistryFileName(string FileName);
        pzlRegistryFileNameWronglyDefined;
        pzlRegistryFileNameNotInUse.


     entityUID_D =
     entityUID_D =
Строка 49: Строка 57:
         core::unsigned8 Byte7,
         core::unsigned8 Byte7,
         core::unsigned8 Byte8).
         core::unsigned8 Byte8).
 
</vip>
==pzlComains::pzlContainerContentInfo_D==
<vip>
     pzlContainerContentInfo_D = pzlComponentInfo_D*.
     pzlContainerContentInfo_D = pzlComponentInfo_D*.
     pzlComponentInfo_D=pzlComponentInfo
     pzlComponentInfo_D=pzlComponentInfo
Строка 59: Строка 69:
         );
         );
         void.
         void.
</vip>
==pzlDomains::pzlSystem_D==
<vip>
    pzlSystem_D = entityUID_D.
</vip>


    pzlSystem_D = entityUID_D.
==pzlDomains::pzlLicenseLevel_D==
<vip>
     pzlLicenseLevel_D = entityUID_D.
     pzlLicenseLevel_D = entityUID_D.
</vip>
==pzlDomains::pzlLicenseNo_D==
<vip>
     pzlLicenseNo_D = entityUID_D.
     pzlLicenseNo_D = entityUID_D.
</vip>
</vip>
Строка 151: Строка 170:


=Описание предикатов=
=Описание предикатов=
==pzl::getContainerName/0==
<vip>getContainerName:()->string ThisContainerName procedure ().
Получить имя файла-контейнера, в котором находится данная компонента</vip>
'''Описание'''
Возвращает имя (полный маршрут) файла, в котором находится данная pzl-компонента.<br>
'''Пример'''
<vip>
...
ContainerName=pzl::getContainerName(),
stdIO::writef("Компонента /"MyComponent/" находится в контейнер %",ContainerName),
...
</vip>
'''Исключения'''
Исключения не генерируются
==pzl::getContainerVersion/0==
<vip>getContainerVersion:()->string ThisContainerVersion procedure ().
Получить идентификатор версии контейнера, в котором находится данная компонента</vip>
'''Описание'''
Возвращает версию pzl-контейнера, в котором находится данная компонента.
Версия контейнера представляется значением строкового типа (string) и определяется константой "pzlContainerVersion_C"
в файле iPzlConfig.i проекта контейнера.
'''Пример'''
Например, файл iPzlCongig.i данного контейнера содержит объявление константы
<vip>constants
  pzlContainerVersion_C="1.0;001".</vip>
Следующий код получает номер версии данного контейнера
<vip>...
ContainerVersion=pzl::getContainerVersion(),
stdIO::writef("Версия контейнера - %",ContainerVersion),
...</vip>
В стандартный выходной поток будет выведено "Версия контейнера - 1.0;001"
'''Исключения'''
Исключения не генерируются
==pzl::getLicenseLevel/0==
<vip>getLicenseLevel:()->string PZLUserLicenseLevel procedure ().
Получить значение уровня лицензии контейнера, в котором находится данная компонента</vip>
'''Описание'''
Возвращает значение уровня лицензии контейнера, в котором находится данная pzl-компонента.
Уровень лицензии определяется издателем контейнера путем использования библиотеки с соответствующим уровнем лицензии и может иметь одно из следующих строковых значений
*"Public" (публичная)
*"Commercial" (коммерческая)
*"Exclusive" (эксклюзивная)
*"SuperExclusive" (супер-эксклюзивная)
*"Unknown" (неизвестная)
Если pzl-компонента находится в контейнере главного приложения, тогда возвращается уровень лицензии главного приложения.
'''Пример'''
Код, приведенный ниже, может получить уровень лицензии текущей компоненты
<vip>...
LicenseLevel=pzl::getLicenseLevel(),
stdIO::writef("Уровень лицензии текущего контейнера - %",LicenseLevel),
...</vip>
'''Исключения'''
Исключения не генерируются
==pzl::getComponentRegisterFileName/0==
<vip>getComponentRegisterFileName:()->pzlDomains::pzlComponentsRegisterFileName_D ComponentRegisterFileName procedure ().
Получить состояние назначения файла-реестра компонент для данного приложения</vip>
'''Описание'''
Возвращает один из следующих термов, определяющих состояние назначения файла-реестра компонент данного приложения.
*pzlRegistryFileName(FileName)
*pzlRegistryFileNameWronglyDefined
*pzlRegistryFileNameNotInUse
'''Пример'''
<vip>
...
RegisterStatus=pzl::getComponentRegisterFileName(),
(
  RegisterStatus=pzlDomains::pzlRegistryFileName(FileName),
  writef("Файл-реестр компонент - %\n",FileName)
or
  RegisterStatus=pzlDomains::pzlRegistryFileNameNotInUse,
  write("Файл-реестр компонент не используется\n")
or
  RegisterStatus=pzlDomains::pzlRegistryFileNameWronglyDefined,
  write("Файл-реестр компонент не был найден при назначении")
)
...</vip>
'''Исключения'''
==pzl::getContainerContentList/1==
<vip>getContainerContentList:(string PZLContainerFileName)->pzlDomains::pzlContainerContentInfo_D ContentInfo procedure (i).
Получить список компонент, содержащихся в контейнере с заданным именем</vip>
==pzl::newByID/2==
<vip>newByID:(pzlDomains::entityUID_D ComponentID,object InObject)->object OutObject.
Создать новый объект, используя уникальный идентификатор компоненты</vip>
'''Описание'''
Создает новый объект pzl-компоненты, зарегистрированной c идентификатором ComponentID.
Pzl-компонента с указанным идентификатором ComponentID должна быть зарегистрирована в одном из допустимых мест регистрации - в реестре Windows или в файле-реестре пользователя *.pzr.
Указатель на объект InObject может быть указателем на любой объект - экземпляр класса. Компонента, чей объект создается, должна знать домен-интерфейс объекта InObject, если в ней предусматривается обращение к этому объекту.
Возвращаемый Object является указателем на созданный объект. Для вызова предиката созданного объекта OutObject должен быть преобразован к домену, определяемому интерфейсом этого класса.
'''Пример'''
Компонента MyComponent поддерживает интерфейс iMyComponent, в котором определен предикат myPredicate(...).


<vip>
<vip>
predicates
...
    classInfo : core::classInfo.
Object=newByID(str("MyComponent"),This),
    % @short Class information  predicate.
MyComponentInstance=tryConvert(iMyComponent,Object),
    % @detail This predicate represents information predicate of this class.
MyComponentInstance:myPredicate(...),
    % @end
...
</vip>
В случае использования уникального идентификатора UID
<vip>
...
Object=newByID(uid(0xDF29A0EA,0x7BA6,0x4425,0x8D,0x88,0x2B,0x3C,0x6F,0xDA,0x0C,0x73),This),
MyComponentInstance=tryConvert(iMyComponent,Object),
MyComponentInstance:myPredicate(...),
...
</vip>


predicates
'''Исключения'''
    getContainerName:()->string ThisContainerName procedure ().
    % @short get the file name of the pzlContainer, in which the given class is placed
    % @detail Returnes the name (full path) of the file, where the given pzlComponent is placed.<br>
    % example:<br>
    %  ...<br>
    %  ContainerName=pzl:getContainerName(),<br>
    %  stdIO::writef("The component "MyComponent" placed in the Container %",ContainerName),<br>
    %  ...
    % @exception No special exception generated by the PzlSystem<br>
    % @end


predicates
Если pzl-система не может создать экземпляр компоненты по указанным ниже возможным причинам, то генерируется исключение.
    getContainerVersion:()->string ThisContainerVersion procedure ().
    % @short get the version of the current pzlContainer, in which the given class is placed
    % @detail Returnes the version of the pzlContainer, where the given pzlComponent is placed.<br>
    % The version of the pzlContainer is of string type and is defined by the constant "pzlContainerVersion_C" in the file iPzlConfig.i
    % of the pzlContainer's Project<br>
    % example:<br>
    %  the file iPzlCongig.i of the given pzlContainer contains the declaration of the constant<br>
    %  constants<br>
    %  pzlContainerVersion_C="1.0;001".<br>
    % the code below can obtain the version of the current pzlContainer<br>
    %  ContainerVersion=pzl::getContainerVersion(),<br>
    %  stdIO::writef("The version of the Container is  %",ContainerVersion),<br>
    %  ...
    % @exception No special exception generated by the PzlSystem<br>
    % @end


predicates
Возможные причины неуспешного создания компоненты
    getLicenseLevel:()->string PZLUserLicenseLevel procedure ().
*pzl-система не имеет доступа к реестру компонент.
    % @short get the license level of the given pzlContainer, in which the given class is placed
*pzl-компонента с указанным именем не найдена в реестре компонент.
    % @detail Returnes the license level of the pzlContainer, where the given pzlComponent is placed.<br>
*pzl-контейнер, содержащий компоненту, с указанным именем не может быть загружен
    % The License Level is defined by the company, which produces the pzlContainer<br>
*загруженный pzl-контейнер не содержит компоненту с указанным именем
    % and may have one of the following string values<br>
*конструктор данный компоненты не может создать экзмепляр компоненты
    % "Public"<br>
    % "Commercial"<br>
    % "Exclusive"<br>
    % "SuperExclusive"<br>
    % "Unknown"<br>
    %  if the current pzlContainer is the application, then the LicenseLevel returns the License
    %  level of the PzlPort
    %
    % example:<br>
    % the code below can obtain the license level of the current pzlContainer<br>
    %  ...<br>
    %  LicenseLevel=pzl:getLicenseLevel(),<br>
    %  stdIO::writef("The License Level of the current pzlContainer is  %",LicenseLevel),<br>
    %  ...
    % @exception No special exception generated by the PzlSystem<br>
    % @end


predicates
Последнее описание исключения содержит текст:
    setStdOutputStream:(outputStream OutputStream).
<vip>newByID failured for the Component with the ID <ID>
(предикат NewByID не выполнен для компоненты с идентификатором <ID>"</vip>


predicates
==pzl::newByName/2==
    getComponentRegisterFileName:()->pzlDomains::pzlComponentsRegisterFileName_D ComponentRegisterFileName procedure ().
<vip>newByName:(string Name,object InObject)->object OutObject procedure (i,i).
    getContainerContentList:(string PZLContainerFileName)->pzlDomains::pzlContainerContentInfo_D ContentInfo procedure (i).
Создать новый объект, используя имя компоненты</vip>


'''Описание'''


predicates
Создает новый объект pzl-компоненты, зарегистрированной под именем Name.
    newByID:(pzlDomains::entityUID_D,object InObject)->object OutObject.


predicates % Creation Object By Name
Pzl-компонента с именем Name должна быть зарегистрирована в одном из допустимых мест регистрации - в реестре Windows или в файле-реестре пользователя *.pzr.
    newByName:(string Name,object InObject)->object OutObject procedure (i,i).
    % @short The class constructor, which creates the new instance of the PzlComponent with the given name
    % @detail Creates the new instance of the pzlComponent with the name Name.
    % The pzlComponent with the name Name must be registered in one of
    % the registration domains - in the Windows Registry or in the local registration file *.pzr.
    % The InObject may be the object pointer of any class instance. And the pzlComponent must
    % know the domain of this Object, if the conversion in the pzlComponent is to be performed.<br>
    %<br>
    % The returned object OutObject is the pointer to the requested object. To invoke the
    % predicate of the named pzlComponent the OutObject must be converted to the domain of
    % this class, for example:<br>
    %  ...<br>
    %  Object=newByName("MyComponent",This),<br>
    %  MyComponentInstance=tryConvert(iMyComponent,Object),<br>
    %  MyComponentInstance:myPredicate(...),<br>
    %  ...
    %
    % @exception The exception is rized if the pzlSystem can not perform the constructor by reasons:<br>
    % - the PzlSystem has no access to the registry store.<br>
    % - the pzlComponent with the given name is not found in the registry Store.<br>
    % - the pzlContainer, which contains the given pzlComponent can not be loaded<br>
    % - the lodaded pzlContainer doesn't contain the given pzlComponent<br>
    % - the constructor of the given pzlComponent can not create the instance<br>
    % The last exception desription contains the text: <br>
    % 'New2. newByName failured for the Component 'Name' '<br>
    % @end


Указатель на объект InObject может быть указателем на любой объект - экземпляр класса. Компонента, чей объект создается, должна знать домен-интерфейс объекта InObject, если в ней предусматривается обращение к этому объекту.


    releaseInactiveContainers:().
Возвращаемый Object является указателем на созданный объект. Для вызова предиката созданного объекта OutObject должен быть преобразован к домену, определяемому интерфейсом этого класса.
    getContainerActivity_nd:(string FileName,unsigned RefCounter) nondeterm (o,o).
    getContainerToBeUnloaded_nd:(string FileName) nondeterm (o).


    subscribe:(notificationAgency::notificationListener NotificationListener).
'''Пример'''
    unSubscribe:(notificationAgency::notificationListener NotificationListener).


predicates % Object registration
Компонента MyComponent поддерживает интерфейс iMyComponent, в котором определен предикат myPredicate(...).
    register:(string ObjectName,object Object) procedure (i,i).
 
    registerMulti:(string ObjectName,object Object) procedure (i,i).
<vip>
    getObjectByName_nd:(string ObjectName)->object Object nondeterm (i).
...
    getNameByObject_nd:(object Object)->string ObjectNameLow nondeterm (i).
Object=newByName("MyComponent",This),
    getNameAndObject_nd:(string ObjectName,object Object) nondeterm (o,o).
MyComponentInstance=tryConvert(iMyComponent,Object),
    unRegister:(string ObjectName,object Object) procedure (i,i).
MyComponentInstance:myPredicate(...),
    unRegisterByName:(string ObjectName) procedure (i).
...
    unRegisterByObject:(object Object) procedure (i).
    unRegisterAll:() procedure ().
</vip>
</vip>


'''Исключения'''
Если pzl-система не может создать экземпляр компоненты по указанным ниже возможным причинам, то генерируется исключение.
Возможные причины неуспешного создания компоненты
*pzl-система не имеет доступа к реестру компонент.
*pzl-компонента с указанным именем не найдена в реестре компонент.
*pzl-контейнер, содержащий компоненту, с указанным именем не может быть загружен
*загруженный pzl-контейнер не содержит компоненту с указанным именем
*конструктор данный компоненты не может создать экзмепляр компоненты
Последнее описание исключения содержит текст:
<vip>newByName failured for the Component 'Name'
(предикат NewByName не выполнен для компоненты с именем "Name")</vip>
==pzl::setStdOutputStream/1==
<vip>setStdOutputStream:(outputStream OutputStream).
Назначить заданный выходной поток в качестве стандартного выходного
потока для всех компонент, используемых данным приложением</vip>
'''Описание'''
Любая компонента может назначить любой существующий выходной поток в качестве стандартного выходного потока. Если это происходит, то все компоненты, используемые данным приложением, начинают использовать этот выходной поток в качестве стандартного.
Так, если одна компонента назначила в качестве стандартного выходного потока поток '''A''', а после этого другая компонента назначила в качестве стандартного выходного потока поток '''B''' то, когда управление вернется к первой компоненте, для нее стандартным выходным потоком будет поток '''B''', установленный второй компонентой.
Если для первой компоненты такая замена неприемлема, то должны приниматься меры по переназначению необходимого выходного потока.
Такое поведение соответсвует принципу целостности приложения, построенного на компонентах.
'''Пример'''
...
outputStream::new()
pzl::setStdOutputStream(OutputStream),
'''Исключения'''
==pzl::register/2==
<vip>register:(string ObjectName,object Object) procedure (i,i).
Зарегистрировать объект под указанным именем ObjectName (однократно)</vip>
==pzl::registerMulti/2==
<vip>registerMulti:(string ObjectName,object Object) procedure (i,i).
Зарегистрировать объект под указанным именем ObjectName (возможно, многократно)</vip>
==pzl::getObjectByName_nd/1==
<vip>getObjectByName_nd:(string ObjectName)->object Object nondeterm (i).
Получить объект, зарегистрированный под указанным именем ObjectName</vip>
==pzl::getNameByObject_nd/1==
<vip>getNameByObject_nd:(object Object)->string ObjectNameLow nondeterm (i).
Получить регистрационное имя объекта</vip>
==pzl::getNameAndObject_nd/2==
<vip>getNameAndObject_nd:(string ObjectName,object Object) nondeterm (o,o).
Получить имя объекта и сам объект</vip>
==pzl::unRegister/2==
<vip>unRegister:(string ObjectName,object Object) procedure (i,i).
Снять с регистрации объект Object с указанным именем ObjectName</vip>
==pzl::unRegisterByName/1==
<vip>unRegisterByName:(string ObjectName) procedure (i).
Снять с регистрации все объекты с указанным именем ObjectName</vip>
==pzl::unRegisterByObject/1==
<vip>unRegisterByObject:(object Object) procedure (i).
Снять с регистрации объект Object</vip>
==pzl::unRegisterAll/0==
<vip>unRegisterAll:() procedure ().
Очистить регистр объектов (снять с регистрации все объекты)</vip>


[[Категория:VpPuZzle]]
[[Категория:VpPuZzle]]

Версия 16:33, 8 октября 2007

Назначение

Класс pzl предназначен для обеспечения работы с pzl-компонентами и получения информации о состоянии pzl-системы. Этот класс обязательно должен включаться в проект любого pzl-контейнера и главного приложения, генерирующего исполняемый (.EXE) файл, даже если нет необходимости обращения к предикатам этого класса.

Имплементация класса pzl содержится:

  • в случае pzl-контейнера (DLL) в библиотеке pzlContainer_YY.lib
  • в случае главного приложения в библиотеке pzlPort_XX.lib

здесь YY и XX - уровень лицензии.

Обращения к предикатам этого класса возможны из любого класса, включенного в проект, использующий pzl-технологию.

Список доменов

pzlComponentsRegisterFileName_D Состояние файла-реестра компонент данного приложения
pzlContainerContentInfo_D Информация о компонентах контейнера
entityUID_D Идентификатор сущности

Описание доменов

pzlDomains::pzlComponentsRegisterFileName_D

Состояние файла-реестра компонент

pzlComponentsRegisterFileName_D=
  pzlRegistryFileName(string FileName);
  pzlRegistryFileNameWronglyDefined;
  pzlRegistryFileNameNotInUse.

Определяет одно из состояний назначения файла-реестра компонент для данного приложения.

pzlRegistryFileName(string FileName)
назначен файл с именем FileName.
pzlRegistryFileNameWronglyDefined
файл-реестр неправильно определен, возможно, отсутствовал на момент назначения.
pzlRegistryFileNameNotInUse
файл-реестр к данному моменту не назначался, то есть не используется.

pzlDomains::pzlContainerContentInfo_D

pzlDomains::entityUID_D

domains
 
    entityUID_D =
        str(string);
        uid(
        core::unsigned32 Unsigned,
        core::unsigned16 Short1,
        core::unsigned16 Short2,
        core::unsigned8 Byte1,
        core::unsigned8 Byte2,
        core::unsigned8 Byte3,
        core::unsigned8 Byte4,
        core::unsigned8 Byte5,
        core::unsigned8 Byte6,
        core::unsigned8 Byte7,
        core::unsigned8 Byte8).

pzlComains::pzlContainerContentInfo_D

    pzlContainerContentInfo_D = pzlComponentInfo_D*.
    pzlComponentInfo_D=pzlComponentInfo
        (
        string Alias,
        entityUID_D ComponentID,
        booleanInt Runable,
        core::namedValue_List UserDefinedInfo
        );
        void.

pzlDomains::pzlSystem_D

    pzlSystem_D = entityUID_D.

pzlDomains::pzlLicenseLevel_D

    pzlLicenseLevel_D = entityUID_D.

pzlDomains::pzlLicenseNo_D

    pzlLicenseNo_D = entityUID_D.

Список предикатов класса

classInfo.
Получение информации о версии и дате последнего изменения класса Pzl
Информация о контейнере
getContainerName:()->string ThisContainerName procedure ().
Получить имя файла-контейнера, в котором находится данная компонента
getContainerVersion:()->string ThisContainerVersion procedure ().
Получить идентификатор версии контейнера, в котором находится данная компонента
getLicenseLevel:()->string PZLUserLicenseLevel procedure ().
Получить значение уровня лицензии контейнера, в котором находится данная компонента
getComponentRegisterFileName:()->pzlDomains::pzlComponentsRegisterFileName_D ComponentRegisterFileName procedure ().
Получить имя файла-реестра компонент, назначенного для данного приложения
getContainerContentList:(string PZLContainerFileName)->pzlDomains::pzlContainerContentInfo_D ContentInfo procedure (i).
Получить список компонент, содержащихся в контейнере с заданным именем
Управление компонентами
newByID:(pzlDomains::entityUID_D,object InObject)->object OutObject.
Создать новый объект, используя уникальный идентификатор компоненты
newByName:(string Name,object InObject)->object OutObject procedure (i,i).
Создать новый объект, используя имя компоненты
setStdOutputStream:(outputStream OutputStream).
Назначить заданный выходной поток в качестве стандартного выходного потока для всех компонент, используемых данным приложением
Регистрация объектов
register:(string ObjectName,object Object) procedure (i,i).
Зарегистрировать объект под указанным именем ObjectName (однократно)
registerMulti:(string ObjectName,object Object) procedure (i,i).
Зарегистрировать объект под указанным именем ObjectName (возможно, многократно)
getObjectByName_nd:(string ObjectName)->object Object nondeterm (i).
Получить объект, зарегистрированный под указанным именем ObjectName
getNameByObject_nd:(object Object)->string ObjectNameLow nondeterm (i).
Получить регистрационное имя объекта
getNameAndObject_nd:(string ObjectName,object Object) nondeterm (o,o).
Получить имя объекта и сам объект
unRegister:(string ObjectName,object Object) procedure (i,i).
Снять с регистрации объект Object с указанным именем ObjectName
unRegisterByName:(string ObjectName) procedure (i).
Снять с регистрации все объекты с указанным именем ObjectName
unRegisterByObject:(object Object) procedure (i).
Снять с регистрации объект Object
unRegisterAll:() procedure ().
Очистить регистр объектов (снять с регистрации все объекты)
Служебные предикаты. Не документируются
releaseInactiveContainers:().
getContainerActivity_nd:(string FileName,unsigned RefCounter) nondeterm (o,o).
getContainerToBeUnloaded_nd:(string FileName) nondeterm (o).
subscribe:(notificationAgency::notificationListener NotificationListener).
unSubscribe:(notificationAgency::notificationListener NotificationListener).
newInstance:().
release:().

Используемые дополнительные ресурсы

Обязательно:

  • Класс Pzl использует библиотеку pzlPort_XX.lib, если целью проекта является исполняемоее приложение (.EXE) и библиотеку pzlContainer_XX - если целью проекта является контейнер (DLL). Указанные библиотеки фактически содержат имплементацию класса Pzl.
  • наличие пакета pzlConfig.

Описание предикатов

pzl::getContainerName/0

getContainerName:()->string ThisContainerName procedure ().
Получить имя файла-контейнера, в котором находится данная компонента

Описание

Возвращает имя (полный маршрут) файла, в котором находится данная pzl-компонента.

Пример

...
ContainerName=pzl::getContainerName(),
stdIO::writef("Компонента /"MyComponent/" находится в контейнер %",ContainerName),
...

Исключения

Исключения не генерируются

pzl::getContainerVersion/0

getContainerVersion:()->string ThisContainerVersion procedure ().
Получить идентификатор версии контейнера, в котором находится данная компонента

Описание

Возвращает версию pzl-контейнера, в котором находится данная компонента.

Версия контейнера представляется значением строкового типа (string) и определяется константой "pzlContainerVersion_C" в файле iPzlConfig.i проекта контейнера.

Пример

Например, файл iPzlCongig.i данного контейнера содержит объявление константы

constants
  pzlContainerVersion_C="1.0;001".

Следующий код получает номер версии данного контейнера

...
ContainerVersion=pzl::getContainerVersion(),
stdIO::writef("Версия контейнера - %",ContainerVersion),
...

В стандартный выходной поток будет выведено "Версия контейнера - 1.0;001"

Исключения

Исключения не генерируются

pzl::getLicenseLevel/0

getLicenseLevel:()->string PZLUserLicenseLevel procedure ().
Получить значение уровня лицензии контейнера, в котором находится данная компонента

Описание

Возвращает значение уровня лицензии контейнера, в котором находится данная pzl-компонента. Уровень лицензии определяется издателем контейнера путем использования библиотеки с соответствующим уровнем лицензии и может иметь одно из следующих строковых значений

  • "Public" (публичная)
  • "Commercial" (коммерческая)
  • "Exclusive" (эксклюзивная)
  • "SuperExclusive" (супер-эксклюзивная)
  • "Unknown" (неизвестная)

Если pzl-компонента находится в контейнере главного приложения, тогда возвращается уровень лицензии главного приложения.

Пример

Код, приведенный ниже, может получить уровень лицензии текущей компоненты

...
LicenseLevel=pzl::getLicenseLevel(),
stdIO::writef("Уровень лицензии текущего контейнера - %",LicenseLevel),
...

Исключения

Исключения не генерируются

pzl::getComponentRegisterFileName/0

getComponentRegisterFileName:()->pzlDomains::pzlComponentsRegisterFileName_D ComponentRegisterFileName procedure ().
Получить состояние назначения файла-реестра компонент для данного приложения

Описание

Возвращает один из следующих термов, определяющих состояние назначения файла-реестра компонент данного приложения.

  • pzlRegistryFileName(FileName)
  • pzlRegistryFileNameWronglyDefined
  • pzlRegistryFileNameNotInUse

Пример

...
RegisterStatus=pzl::getComponentRegisterFileName(),
(
  RegisterStatus=pzlDomains::pzlRegistryFileName(FileName),
  writef("Файл-реестр компонент - %\n",FileName)
or
  RegisterStatus=pzlDomains::pzlRegistryFileNameNotInUse,
  write("Файл-реестр компонент не используется\n")
or
  RegisterStatus=pzlDomains::pzlRegistryFileNameWronglyDefined,
  write("Файл-реестр компонент не был найден при назначении")
)
...

Исключения

pzl::getContainerContentList/1

getContainerContentList:(string PZLContainerFileName)->pzlDomains::pzlContainerContentInfo_D ContentInfo procedure (i).
Получить список компонент, содержащихся в контейнере с заданным именем

pzl::newByID/2

newByID:(pzlDomains::entityUID_D ComponentID,object InObject)->object OutObject.
Создать новый объект, используя уникальный идентификатор компоненты


Описание

Создает новый объект pzl-компоненты, зарегистрированной c идентификатором ComponentID.

Pzl-компонента с указанным идентификатором ComponentID должна быть зарегистрирована в одном из допустимых мест регистрации - в реестре Windows или в файле-реестре пользователя *.pzr.

Указатель на объект InObject может быть указателем на любой объект - экземпляр класса. Компонента, чей объект создается, должна знать домен-интерфейс объекта InObject, если в ней предусматривается обращение к этому объекту.

Возвращаемый Object является указателем на созданный объект. Для вызова предиката созданного объекта OutObject должен быть преобразован к домену, определяемому интерфейсом этого класса.

Пример

Компонента MyComponent поддерживает интерфейс iMyComponent, в котором определен предикат myPredicate(...).

...
Object=newByID(str("MyComponent"),This),
MyComponentInstance=tryConvert(iMyComponent,Object),
MyComponentInstance:myPredicate(...),
...

В случае использования уникального идентификатора UID

...
Object=newByID(uid(0xDF29A0EA,0x7BA6,0x4425,0x8D,0x88,0x2B,0x3C,0x6F,0xDA,0x0C,0x73),This),
MyComponentInstance=tryConvert(iMyComponent,Object),
MyComponentInstance:myPredicate(...),
...

Исключения

Если pzl-система не может создать экземпляр компоненты по указанным ниже возможным причинам, то генерируется исключение.

Возможные причины неуспешного создания компоненты

  • pzl-система не имеет доступа к реестру компонент.
  • pzl-компонента с указанным именем не найдена в реестре компонент.
  • pzl-контейнер, содержащий компоненту, с указанным именем не может быть загружен
  • загруженный pzl-контейнер не содержит компоненту с указанным именем
  • конструктор данный компоненты не может создать экзмепляр компоненты

Последнее описание исключения содержит текст:

newByID failured for the Component with the ID <ID>
(предикат NewByID не выполнен для компоненты с идентификатором <ID>"

pzl::newByName/2

newByName:(string Name,object InObject)->object OutObject procedure (i,i).
Создать новый объект, используя имя компоненты

Описание

Создает новый объект pzl-компоненты, зарегистрированной под именем Name.

Pzl-компонента с именем Name должна быть зарегистрирована в одном из допустимых мест регистрации - в реестре Windows или в файле-реестре пользователя *.pzr.

Указатель на объект InObject может быть указателем на любой объект - экземпляр класса. Компонента, чей объект создается, должна знать домен-интерфейс объекта InObject, если в ней предусматривается обращение к этому объекту.

Возвращаемый Object является указателем на созданный объект. Для вызова предиката созданного объекта OutObject должен быть преобразован к домену, определяемому интерфейсом этого класса.

Пример

Компонента MyComponent поддерживает интерфейс iMyComponent, в котором определен предикат myPredicate(...).

...
Object=newByName("MyComponent",This),
MyComponentInstance=tryConvert(iMyComponent,Object),
MyComponentInstance:myPredicate(...),
...

Исключения

Если pzl-система не может создать экземпляр компоненты по указанным ниже возможным причинам, то генерируется исключение.

Возможные причины неуспешного создания компоненты

  • pzl-система не имеет доступа к реестру компонент.
  • pzl-компонента с указанным именем не найдена в реестре компонент.
  • pzl-контейнер, содержащий компоненту, с указанным именем не может быть загружен
  • загруженный pzl-контейнер не содержит компоненту с указанным именем
  • конструктор данный компоненты не может создать экзмепляр компоненты

Последнее описание исключения содержит текст:

newByName failured for the Component 'Name'
(предикат NewByName не выполнен для компоненты с именем "Name")

pzl::setStdOutputStream/1

setStdOutputStream:(outputStream OutputStream).
Назначить заданный выходной поток в качестве стандартного выходного
потока для всех компонент, используемых данным приложением

Описание

Любая компонента может назначить любой существующий выходной поток в качестве стандартного выходного потока. Если это происходит, то все компоненты, используемые данным приложением, начинают использовать этот выходной поток в качестве стандартного.

Так, если одна компонента назначила в качестве стандартного выходного потока поток A, а после этого другая компонента назначила в качестве стандартного выходного потока поток B то, когда управление вернется к первой компоненте, для нее стандартным выходным потоком будет поток B, установленный второй компонентой.

Если для первой компоненты такая замена неприемлема, то должны приниматься меры по переназначению необходимого выходного потока.

Такое поведение соответсвует принципу целостности приложения, построенного на компонентах.

Пример

... outputStream::new() pzl::setStdOutputStream(OutputStream),


Исключения

pzl::register/2

register:(string ObjectName,object Object) procedure (i,i).
Зарегистрировать объект под указанным именем ObjectName (однократно)

pzl::registerMulti/2

registerMulti:(string ObjectName,object Object) procedure (i,i).
Зарегистрировать объект под указанным именем ObjectName (возможно, многократно)

pzl::getObjectByName_nd/1

getObjectByName_nd:(string ObjectName)->object Object nondeterm (i).
Получить объект, зарегистрированный под указанным именем ObjectName

pzl::getNameByObject_nd/1

getNameByObject_nd:(object Object)->string ObjectNameLow nondeterm (i).
Получить регистрационное имя объекта

pzl::getNameAndObject_nd/2

getNameAndObject_nd:(string ObjectName,object Object) nondeterm (o,o).
Получить имя объекта и сам объект

pzl::unRegister/2

unRegister:(string ObjectName,object Object) procedure (i,i).
Снять с регистрации объект Object с указанным именем ObjectName

pzl::unRegisterByName/1

unRegisterByName:(string ObjectName) procedure (i).
Снять с регистрации все объекты с указанным именем ObjectName

pzl::unRegisterByObject/1

unRegisterByObject:(object Object) procedure (i).
Снять с регистрации объект Object

pzl::unRegisterAll/0

unRegisterAll:() procedure ().
Очистить регистр объектов (снять с регистрации все объекты)