Опрос по реализации системы команд в программе
Добавлено: 31.12.2014 03:02:04
Интересно ваше мнение, допустим есть программа и плагины к ней вы можете написать посредством библиотек. Предусмотрена функция для доступа к чужим плагинам и встроенным функциям программы. Большинство функций могут выполняться как процедура, но что если нужно получить результат от функции? Скажем из чужого плагина посредством команды запросить координаты. Как было бы удобнее на ваш вкус вам получить данные.
Вы пишете код с командой, что то вроде:
Как реализовать функцию Command()
Вар.1
+ Прямое получение параметра.
- Нельзя проверить что команда была выполнена, если разработчик чужой команды не реализовал заполнение Result..
- Сложная обработка без документации
Итоговый код:
Вар.2
-Не в одну строку решение, ответ не получается напрямую.
-Многим не понравится хранение ответов как строк или списком переменных
Итоговый код:
Вы пишете код с командой, что то вроде:
- Код: Выделить всё
OwnerApplication.Command('GetPoint MyCar');
.....
Как реализовать функцию Command()
Вар.1
function Command(CmdStr:String):Variant;
или урезано и узко под win
function Command(CmdStr:String):OleVariant;
+ Прямое получение параметра.
- Нельзя проверить что команда была выполнена, если разработчик чужой команды не реализовал заполнение Result..
- Сложная обработка без документации
Итоговый код:
- Код: Выделить всё
rValue:=OwnerApplication.Command('GetPoint MyCar');
if rValue<>null then
begin
rValue.....
end;
Вар.2
- Код: Выделить всё
function Command(CmdStr:String):Integer;
//Функция возвращает меньше 0, если не найдена или не выполнена правильно.
//Или возвращает индекс для обращения к Массиву/Списку текстовому куда может при необходимости быть помещен ответ выполнения процедуры сторонней.
-Не в одну строку решение, ответ не получается напрямую.
-Многим не понравится хранение ответов как строк или списком переменных
Итоговый код:
- Код: Выделить всё
rValue:=OwnerApplication.Command('GetPoint MyCar');
if rValue>-1 then
begin
tmpStr:=OwnerApplication.CommandResults(rValue);
...Parse(tmpStr);
end;