Rsh API  SDK 2.1
Документация по программированию
 Указатель Классы Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Макросы Страницы
Открытые члены | Полный список членов класса
Структура IRshFactoryabstract

Интерфейс IRshFactory - абстрактная фабрика классов. Подробнее...

#include <IRshFactory.h>

Открытые члены

virtual U32 __stdcall CreateInstance (const char *libIName, void **libInterface, void *factoryParameter=((VOID *) 0x0))=0
 Инстанцирование объекта класса. Подробнее...
 
virtual U32 __stdcall Release (void **objectAddress)=0
 Освобождение ресурсов и удаление объекта Подробнее...
 
virtual U32 __stdcall Free ()=0
 Освобождение всех ресурсов и удаление всех объектов, порожденных фабрикой. Подробнее...
 
virtual U32 __stdcall Get (U32 code, RshBaseType *address)=0
 Получение дополнительной информации о фабрике. Подробнее...
 

Подробное описание

Интерфейс IRshFactory - абстрактная фабрика классов.

Объекты с этим интерфейсом (фабрика) используются для инстанцирования других объектов, таких как классы абстракции устройств (IRshDevice), базовые классы (IPLX9054 и др.), классы алгоритмической библиотеки (IDPA).

См. также
IRshDevice | RshDllClient

Методы

virtual U32 __stdcall IRshFactory::CreateInstance ( const char *  libIName,
void **  libInterface,
void *  factoryParameter = ((VOID *) 0x0) 
)
pure virtual

Инстанцирование объекта класса.

Аргументы
[in]libINameИмя интерфейса класса, который необходимо инстанцировать. Обычно, каждая конкретная реализация класса фабрики порождает объекты с определенным интерфейсом (например, объекты для управления устройствами с интерфейсом IRshDevice). Если переданное имя интерфейса не поддерживается фабрикой, будет возвращена ошибка.
[in,out]libInterfaceУказатель на указатель на объект класса, который необходимо инстанцировать. После успешного вызова метода, указатель будет ссылаться на фактически созданный фабрикой объект класса с нужным интерфейсом.
[in]factoryParameterДополнительные параметры инстанцирования, в большинстве случаев не используется.
Возвращает
RSH_API_SUCCESS или код ошибки.

Основной метод класса фабрики, используется для инстанцирования объектов (предназначение фабрики).
Указатель на созданный экземлпяр класса будет возвращен в параметре libInterface.

Прим.
Будьте осторожны при работе с указателями! Внтури метода проверяется только то, что указатель ненулевой, тип данных проверить невозможно.
В большинстве случаев, нужно объявить переменную как указатель на интерфейс класса, который нужно инстанцировать, и передать в метод указатель на нее:
IRshDevice* device;
factory->CreateInstance("IRSHDevice",(void**)&device);
См. также
RshDllClient
virtual U32 __stdcall IRshFactory::Free ( )
pure virtual

Освобождение всех ресурсов и удаление всех объектов, порожденных фабрикой.

Возвращает
RSH_API_SUCCESS или код ошибки.

Используя данный метод можно гарантированно освободить все выделенные ресурсы и удалить созданные фабрикой объекты.
Типичный сценарий использования - вызов данного метода в тот момент, когда созданные фабрикой объекты уже не нужны - в деструкторе основного класса, или при выходе из приложения.

Прим.
После успешного вызова данного метода все созданные фабрикой объекты будут удалены, и указатели на них станут недействительными либо равными NULL!
См. также
Release()
virtual U32 __stdcall IRshFactory::Get ( U32  code,
RshBaseType address 
)
pure virtual

Получение дополнительной информации о фабрике.

Аргументы
[in]codeОдин из кодов перечисления RSH_GET.
[in,out]addressАдрес объекта, в котором будет передана нужная информация. Различные коды требуют различных типов данных, но все они должны быть унаследованы от RshBaseType.
Возвращает
RSH_API_SUCCESS или код ошибки.

Этот метод - аналог метода IRshDevice::Get().
Для классов фабрики, экспортируемых из dll, можно получить такую информацию, как путь к файлу (RSH_GET_LIBRARY_PATH), версию библиотеки (RSH_GET_LIBRARY_VERSION_STR) и др.

См. также
RSH_GET
virtual U32 __stdcall IRshFactory::Release ( void **  objectAddress)
pure virtual

Освобождение ресурсов и удаление объекта

Аргументы
[in,out]objectAddressАдрес объекта, который ранее был инстанцирован фабрикой. Каждый раз при успешном вызове метода CreateInstance() адрес порожденного фабрикой объекта сохраняется во внутреннем хранилище. Если данный объект уже не нужен, можно передать указатель на него в этот метод, и объект будет надлежащим образом удален, а все связанные с ним ресурсы выгружены.
Переданный указатель, при этом, станет равным NULL.
Возвращает
RSH_API_SUCCESS или код ошибки.

Освобождение ресурсов, выделенных для объекта 'objectAddress', который был ранее создан с помощью метода CreateInstance(), и последующее удаление объекта. Если переданный адрес не найден во внутреннем хранилище (т.е. переданный объект не создавался данной фабрикой) будет возвращен код ошибки.

Прим.
Можно также использовать метод Free(), который последовательно вызывает Release() для всех объектов, ранее порожденных фабрикой.
См. также
Free()

Объявления и описания членов структуры находятся в файле: