от 20.08.1999
GroupStudio - это
среда для интеграции множества разнообразных
OLE-компонент в одно единое целое. Она
предоставляет для каждого объекта рабочее окно и
дает возможность получить доступ к интерфейсам
всех остальных подключенных объектов.
Обращение к объектам
осуществляется по имени их класса. В GroupStudio
любой объект может находится в подключенном
или поддерживаемом состоянии. Подключенное
состояние указывает на то, что данный объект
загружен в память и указатель на его интерфейс
можно получить немедленно. Поддерживаемое
состояние означает то, что объект в данный момент
не загружен, но его можно запустить вручную,
используя специальный метод класса App.
Следует заметить, что некоторые объекты
загружаются в память FIDOStudio сразу после ее
запуска и хранятся там все время работы, в то
время как некоторые объекты изначально
устанавливаются в состояние "поддерживаемый" и
загружается/уничтожается только по
необходимости.
Так как каждый объект может
быть загружен несколько раз, то для обеспечения
точной идентификации при подключении ему
присваивается уникальное имя (FullName),
формат которого таков : "Имя класса[ID]".
Также каждому новому объекту
присваивается абсолютный порядковый номер ID,
который используется при поиске объектов через
методы GetObjectName и GetAvObjectName.
При загрузке объекта также
опрашивается имя проекта к которому он
принадлежит (PrjName), это имя
прописывается в диалоге "О программе",
заменяя информацию GroupStudio. А
также тип объекта (ObjType) - в
конечном счете это интерфейс, каждый тип объекта
должен быть описан и опубликован, после чего его
изменение не допускается. Стоит заметить, что
если PrjName не несет за собой какой-либо
практической нагрзки, то ObjType - является
основой связывания компонентов.
Для подключения к
интерфейсу GroupStudio используйте класс "GroupStudio.App",
его описание приведено ниже.
Это не
окончательный вариант интерфейса !
Класс GroupStudio.App
HRESULT _stdcall GetObject([in]
BSTR FullName, [out, retval] VARIANT * Value );
Возвращает в Value указатель на
объект с именем FullName.
В случае ошибки в Value возвращается null.
Для получения информации об ошибке исп. GetLastError.
HRESULT _stdcall LoadObject([in]
BSTR ObjName, [out, retval] BSTR * Value );
Подключает объект класса ObjName
и возвращает в Value имя созданного объекта.
В случае ошибки в Value возвращается
пустая строка. Для получения информации об
ошибке исп. GetLastError.
HRESULT _stdcall UnloadObject([in]
BSTR FullName, [out, retval] long * Value );
Отключает объект c именем FullName.
В случае ошибки в Value возвращается -1. Для
получения информации об ошибке исп. GetLastError.
HRESULT _stdcall GetObjectName([in]
long ID, [out, retval] BSTR * Value );
Используется для получения
списка всех подключенных объектов. В ID
указывается номер объекта (первый = 0). В случае
успеха функция возвращает в Value имя
найденного объекта. GetLastError вернет ER_NO_MORE_OBJECTS
если опрашиваемый объект не подключен.
В случае ошибки в Value возвращается
пустая строка. Также см. функцию GetLastError
и описание ER_NO_MORE_OBJECTS.
HRESULT _stdcall GetAvObjectName([in]
long ID, [out, retval] BSTR * Value );
Используется для получения
списка всех поддерживаемых классов. В ID
указывается номер класса (первый = 0). В случае
успеха функция возвращает в Value имя
найденного класса.
В случае ошибки в Value возвращается
пустая строка. Также см. функцию GetLastError
и описание ER_NO_MORE_OBJECTS.
HRESULT _stdcall GetObjectType([in]
BSTR FullName, [out, retval] BSTR * Value );
Возвращает тип подключенного
объекта с именем FullName.
В случае ошибки в Value возвращается
пустая строка. Также см. функцию GetLastError.
HRESULT _stdcall GetAvObjectType([in]
BSTR ObjName, [out, retval] BSTR * Value );
Возвращает тип поддерживаемого
класса с имненм ObjName.
В случае ошибки в Value возвращается
пустая строка. Также см. функцию GetLastError.
HRESULT
_stdcall RaiseException([in] BSTR Message );
Выводит сообщение о
ошибке, описание которой указано в Message.
Модуль должен вызывать этот метод при
возникновении в нем серьезной ошибки.
HRESULT _stdcall GetLastError([out,
retval] long * Value );
Возвращает код последней
возникшей ошибки.
HRESULT _stdcall GetErrMessage([in]
long ErrCode, [out, retval] BSTR * Value );
Возвращает описание
ошибки с кодом ErrCode, возвращаемом
функцией GetLastError.
Коды ошибок
ER_CREATEFAIL |
1 |
Ошибка создания
объекта |
ER_MAXINSTANCE |
2 |
Загружено
максимальное количество копий данного объекта |
ER_OBJECT_NOT_FOUND |
3 |
Объект не найден |
ER_NO_MORE_OBJECTS |
4 |
В списке больше нет
объектов |
Это не
окончательный вариант интерфейса !
Требования
к компонентам GroupStudio
Любой компонент,
работающий в GroupStudio, должен иметь
некоторый набор методов, описание которых
приведено ниже:
HRESULT
_stdcall GetModuleInfo([out] BSTR * Author, [out] BSTR * AuthorInfo,
[out] BSTR * Version, [out] BSTR * ProdName, [out] BSTR * AdditionalInfo, [out] BSTR *
ObjType, [out] BSTR * PrjName );
Эта функция должна
возвращать информаицю о компоненте. Данная
информация используется в диалоге "О
программе" в главном меню GroupStudio. Описание всех параметров
приведено ниже:
Author - имя и фамилия автора компонента,
написанные в Win1251 кодировке.
AuthorInfo - информация об авторе. В этой строке
рекомендуется указывать FTN-адрес, место
жительства и т.п. информацию.
Version - версия компонента.
ProdName - полное название компонента
AdditionalInfo - дополнительная информация.
ObjType - тип объекта
PrjName - название проекта.
HRESULT _stdcall GetModuleConfiguration([out]
long * MaxInstance, [out] long * Attr, [out] long * Reserved );
Эта функция должна
возвращать информацию, используемую FIDOStudio для
первичной настройки объекта. Описание
параметров приведено ниже :
MaxInstance - должно возвращать сколько копий
данного объекта может быть одновременно открыто GroupStudio.
Укажите FS_UNLIMITED, если количество копий
неограниченно.
Attr - атрибуты модуля. Должно содержать битовую
комбинацию следующих констант :
MC_AUTOLOAD |
1 |
Подключать
модуль сразу после загрузки GroupStudio. |
MC_NOWINDOW
|
2 |
Не
выделять окно модулю |
HRESULT _stdcall ExecuteCommand([in]
BSTR CommandName, [out, retval] long * Value );
Этот метод вызывает команду,
зарегистрированную через RegisterMenuCommand.
CommandName - имя вызываемой команды.
В случае успеха возвращает в Value MER_NOERROR,
иначе - код ошибки.
HRESULT _stdcall RegisterMenuCommand([in]
long ID, [out] BSTR * CommandName, [out] BSTR * MenuPath, [out] long * Att, [out] unsigned
short * Reserved2, [out, retval] long * Value );
Эта функция служит для
регистрации места по-умолчанию в главном меню FIDOStudio.
ID - номер команды (первый - ноль). При
установке модуля GroupStudio вызывает функцию RegisterMenuCommand
(постоянно увеличивая ID), до тех пор, пока она
не возвратит в Value MER_NO_MORE_COMMANDS.
CommandName - должно возвращать название
команды, используемое при вызове ExecuteCommand.
MenuPath - должно возвращать строку,
указывающую положение и название регистрируемой
команды в главном меню FIDOStudio. Пункты меню должны
разделяться символом "\", символ "&"
указывает, что следующий символ содержит
"горячую" клавишу. Например, указав в MenuPath
"&Файл\&База\З&аписать" вы добавите в
меню "Файл"->"База" пункт
"Записать". Если укзанные разделы меню не
существуют, то они создадутся.
Att - Атрибуты пункта меню. Могут
содержать битовую комбинацию следующих констант
:
RMC_SENDTOALL |
1 |
Посылать
команду всем подключеным окнам данного класса. |
Reserved2 - эти
поля зарезервированы и должны быть установлены в
0.
HRESULT _stdcall Quit([in]
long Attr );
Этот метод вызывается GroupStudio'ей
непосредственно перед отключением объекта. В Attr
указывается код завершения.
Коды ошибок
MER_NOERROR |
0 |
MER_COMMAND_NOT_REGISTRED
|
-1 |
MER_NO_MORE_COMMANDS |
-2 |
Константы
Стоит заметить, что этот
проект рассчитан только на русского потребителя,
так что крайне не рекомендуется в
разрабатываемых компонентах использовать язык,
отличный от русского.
Замечание: GroupStudio - некоммерческая среда, но разработчики
могут распространять свои компоненты на
коммерческой основе.
|