Обеспечение доступности объектной модели с помощью автоматизации в Delphi: какой самый простой способ? - PullRequest
3 голосов
/ 22 июня 2010

Мы переписываем ядро ​​вычислений с нуля в Delphi и ищем способы, позволяющие другим людям писать код против него.

Автоматизация кажется достаточно безопасным способом сделать это.Мы думаем об одном использовании: сделать его доступным для VBA / Office, а также сгенерировать сборку .NET (это легко на основе объекта автоматизации).

Но код все равно должен быть простым в использовании изDelphi, так как мы будем писать наш (настольный) пользовательский интерфейс с этим.

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

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

Альтернативным способом может быть сначала закончить всю объектную модель и написать отдельный сервер автоматизации, который описывает только объект верхнего уровня, переключатель $METHODINFO ON ииспользуйте TObjectDispatch, чтобы вернуть все подчиненные объекты. На мой взгляд, это повлечет за собой необходимость написания оболочек для возврата объектов через интерфейс IDispatch.Поскольку существует более 100 различных классов, это не выглядит привлекательным вариантом. Редактировать: TObjectDispatch достаточно умен, чтобы обернуть любые объекты, возвращаемые свойствами и методами;поэтому нужно обернуть только верхний объект (ы).Однако отсутствие полной библиотеки типов означает, что возможно только позднее связывание.

Существует ли другой, более простой (читай: без проблем) способ написания COM-доступной объектной модели в Delphi?

Ответы [ 2 ]

2 голосов
/ 22 июня 2010

Вам не нужно использовать конструктор библиотеки типов.Вы можете написать или сгенерировать (например, из RTTI ваших классов Delphi) файл .ridl и добавить его в свой проект библиотеки автоматизации.

0 голосов
/ 24 июня 2010

Создание описания интерфейса из RTTI - отличная идея! После того, как вы создали свои интерфейсы, вы можете сгенерировать из них модуль delphi и реализовать его в ваших классах. Конечно, большинство уже реализовано, так как вы все-таки создали интерфейсы из этих классов. Разрешение позднего связывания может быть сделано после этого вручную, используя RTTI и реализуя IDispatch и IDispatchEx в общем базовом классе сценариев классов.

...