@marsdenden

Как на delphi вызвать метод com объекта, название которого на момент написания программы неизвестно?

Всем здравствуйте!
Как обращаться к методам и свойствам ole-объекта мне известно и понятно. На примере драйвера ККМ от компании Штрих-М

v:=CreateOleObject(‘AddIn.DrvFR’);
v.Password:=30;
v.Quantity:=1000;
v.Sale;


Но мне необходимо сделать несколько иное - написать программу, которая будет являться неким интерпретатором некоего псевдоязыка, соответственно, методы и свойства будут в переменных и на момент компиляции программы будут неизвестны. Однако есть какой-то способ вызывать эти методы и обращаться к свойствам.
К примеру, в 1С можно динамически загрузить любую Dll и обращаться к любым методам и свойствам, которые там есть. Каким образом интерпретатор находит нужный метод и производит обращение к нему? Как это можно реализовать на Delphi? Что-то типа такого:

obj.PropertySet('Password','30');
obj.ExecMethod('Sale');
  • Вопрос задан
  • 485 просмотров
Решения вопроса 1
@marsdenden Автор вопроса
В общем, вопрос решен. Используя методы IDispatch (которым и является результат CreateOleObject) можно узнать, какие методы и свойства имеются в подключаемом COM-объекте и уже дальше использовать Invoke
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kalapanga
Говоря об 1С, Вы очевидно имеете в виду технологию внешних компонент? Тогда речь идёт не о "любой DLL", а о написанной по вполне конкретным правилам и соглашениям. Если я правильно помню, там обязательно должны быть предопределенные свойства и методы, через которые можно получить список остальных свойств и методов. Всё это где-нибудь на ИТС описано с примерами.
Так что если Вы имеете ввиду какие-то непонятные объекты вообще, то ответ - никак. Если вполне конкретные, написанные по известным Вам правилам, то ответ - изучайте эти правила, структуру этих Ваших объектов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы