|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.04.2015, 22:12 | #1 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
IDispatch. GetIDsOfNames. Invoke. OLE Automation.
В продолжении изучения диспатчей в OLE автоматике дошел до следующего этапа, это вызов методов.
Наскоро оформил его в класс для удобства портирования потом. Прошу форумчан подсказать (если можно протестировать) чего я не учел еще в коде, который прикрепил во вложении. Результат сего кода следующий: Цитата:
Хотя похоже что свойства устанавливаются. Чего я не учел? Заранее спасибо.
I'm learning to live...
|
|
12.04.2015, 23:04 | #2 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,781
|
Код оформлен не по правилам Borland, я такой читать не умею.
А вообще, не понял, зачем понадобился такой изврат. OLE, Automation и ActiveX были прозрачно вписаны в компилятор Delphi как раз ради того, чтобы свои велосипеды изобретать не приходилось. Какая изначальная задача решается? |
13.04.2015, 06:43 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
GetIDsOfNames принято считать медленным вызовом.
В книгах рекомендуют за один вызов получить dispid всех нужных методов и потом использовать полученные коды. Еще бросается в глаза заполнение DispParam - количество аргументов заполняем а сами аргументы - нет. Надо заполнять cArgs и rgvarg. Вот эта строчка тоже несколько непоянтна: DispParam.rgvarg^[i].bstrVal:='' |
13.04.2015, 07:22 | #4 | |||||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Вот такая вот изначальная задача - увеличить возможности нового ЯВУ. Цитата:
Цитата:
Цитата:
Дело в том что у меня есть параметр Item['Language']:='VBScript'; Вот чето на него не ругается. Не дает ошибку DISP_E_PARAMNOTFOUND Но вызов самого метода с параметром неверный. Но где.... Я и на StringToOleStr пока глаза закрываю, мне бы сейчас добиться понимания. Цитата:
Пока что меня интересует что это за ошибка такая, что мне попалась...
I'm learning to live...
|
|||||
19.04.2015, 20:32 | #5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Начало
Итак. Подведу итого того что удалось выяснить не спеша.
Код оформил в виде класса, который задействует интерфейс и его свойства, передаваемые в качестве строки. Мало ли - взбрендит в голову вводить через readln. Допустим есть задача - вычислить выражение. Выражение введенное в консоли. Оч. удобно будет применить интерфейс VBS для такого или Excell. Конечно можно это и делать через обертки Делфи, а не через интерфейсы. Но вдруг нужно больше универсальности, тогда без этого не обойтись. Код разобью на несколько постов. Каждый метод отдельным постом для удобства. Код прокомментирован. Комментарии, критика, поправки будут приветствоваться. Сам пример прикладываю в вложении. Там на Делфи DLL с тестовым OLE сервером (iTester.dll нужно будет скомпилировать), который нужно будет зарегистрировать в системе либо через regsvr32.exe либо средствами Делфи. Там же исходник (правда на Лазарусе), но помех его использования в Делфи быть не должно. Описание класса: Код:
I'm learning to live...
Последний раз редактировалось Stilet; 19.04.2015 в 20:44. |
19.04.2015, 20:32 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Функция перевода ошибок в понятный текстовый вид
Код:
I'm learning to live...
|
19.04.2015, 20:33 | #7 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Сеттер и геттер для работы с свойствами интерфейса
Код:
I'm learning to live...
|
19.04.2015, 20:34 | #8 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Сам метод Invoke вызывающий метод или свойство интерфейса
Код:
I'm learning to live...
|
19.04.2015, 20:35 | #9 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Функция приготовления аргументов для передачи в Invoke интерфейса
Код:
I'm learning to live...
|
19.04.2015, 20:35 | #10 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Получение ID метода или свойства. GetIDsOfNames
Код:
I'm learning to live...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
GetIDsOfNames. DISP_E_UNKNOWNNAME. Правильное использование. | Stilet | Win Api | 9 | 12.04.2015 09:40 |
COM/OLE Automation, больше не в XE версиях Delphi? | Человек_Борща | Общие вопросы Delphi | 0 | 28.02.2014 11:34 |
процедура invoke | chpok1 | Помощь студентам | 1 | 07.06.2013 17:16 |
Проблема с Invoke в Windows Forms | wmzvov | Помощь студентам | 1 | 16.09.2011 20:42 |
Как узнать тип (класс) OLE Automation объекта? | Stilet | Win Api | 2 | 02.07.2010 09:07 |