GroupStudio

Предидущая Начало

Проекты

 

 

 

от 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

Константы

FS_UNLIMITED

-1

 

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


Замечание: GroupStudio - некоммерческая среда, но разработчики могут распространять свои компоненты на коммерческой основе.