доступ к статическому свойству через COM - PullRequest
5 голосов
/ 11 марта 2010

возможно ли получить доступ к статическому свойству COM-объекта, не создавая экземпляр объекта?

моя ситуация это: У меня есть неуправляемое приложение (написано на Delphi). это приложение предоставляет интерфейсный интерфейс на основе COM. до сих пор я только написал управляемые плагины в C #. Плагины предоставляют свою информацию (имя, автора, ..) через статическое свойство, которое возвращает экземпляр PluginInfo (который реализует IPluginInfo). к этому статическому свойству я могу получить доступ к управляемым плагинам, используя http://managedvcl.com.

Теперь я хочу написать неуправляемые плагины на том же интерфейсе. я могу загрузить их, используя:

plug := CreateComObject(TGuid) as IMyPlugInterface;

и они запускаются, но я не знаю, как прочитать их PluginInfo.

Итак, вопрос снова : есть ли другой способ, кроме реализации IPluginInfo в классе плагина и доступа к информации только после того, как я создал экземпляр плагина?

Ответы [ 2 ]

2 голосов
/ 12 марта 2010

Это может быть не так "элегантно", как статическое свойство, предоставляемое архитектурами плагинов C #, к которым вы привыкли, но вы можете предоставить экспортированную функцию в COM DLL, которая возвращает IPluginInfo. По соглашению эта экспортируемая функция должна иметь одинаковое имя в каждой подключаемой библиотеке DLL, предназначенной для работы в вашей архитектуре.

Хост-приложение будет динамически получать адрес процедуры для экспортируемой функции во время выполнения, а затем вызывать его, чтобы получить интерфейсный объект IPluginInfo для этой конкретной подключаемой библиотеки DLL. Механизм для этого может быть заключен в класс для вашей архитектуры подключаемых модулей, скрывая детали реализации.

Потребуется очень небольшая работа, чтобы достичь точки, в которой ваша архитектура подключаемого модуля будет столь же удобна в использовании и кодировании, как и инфраструктура C #, к которой вы более привыкли.

1 голос
/ 11 марта 2010

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

...