Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Название функции в текстовой переменной
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
realgoldman realgoldman вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.02.2015
Question Название функции в текстовой переменной - 04.02.2015, 14:47

Всем здравствуйте!
Не хватает знаний о динамики сибилдера. Хотел бы попросить помощи у сообщества.
К сути:
есть текстовая переменная functionName.
cpp Код:
AnsiString functionName = "myFunction1";

Как вызвать функцию название которой находится в текстовой переменной?

Можно конечно вызвать напрямую:
cpp Код:
myFunction1();
это когда все заведомо ясно. В моем случае есть импровизация командной строки и пользователь сам прописывает какую функцию запустить?

Заранее спасибо!
Ответить с цитированием
  (#2 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,399
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 04.02.2015, 21:49

В этом виде C++ - никак.
Если это синусы/косинусы в анализаторе выражений, то можно парсер написать.
А вызвать произвольную функцию произвольного класса без его предварительной подготовки (switch на функцию, например) по имени нельзя.
Есть языки программирования, где это возможно.
Ответить с цитированием
  (#3 (permalink)) Старый
realgoldman realgoldman вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.02.2015
По умолчанию 05.02.2015, 14:53

Цитата:
Сообщение от Rius Посмотреть сообщение
В этом виде C++ - никак.
Если это синусы/косинусы в анализаторе выражений, то можно парсер написать.
А вызвать произвольную функцию произвольного класса без его предварительной подготовки (switch на функцию, например) по имени нельзя.
Есть языки программирования, где это возможно.
ну спасибо! обрадовали. на другом форуме мне сказали что можно попробовать map/pair.
Только с чем его едят... пока не понимаю... примерчик бы найти......
Ответить с цитированием
  (#4 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,399
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 05.02.2015, 14:56

Применение map/pair это тот же switch, только список имён функций перенесён из кода в данные.
Это словарь типа <строка, указатель на функцию>
Qt: QMap<QString, func *>
C#: Dictionary<string, delegate...>
Для этого надо в любом случае прописывать все эти списки заранее.
Зачем оно вам надо?
Ответить с цитированием
  (#5 (permalink)) Старый
realgoldman realgoldman вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.02.2015
По умолчанию 05.02.2015, 15:06

Цитата:
Сообщение от Rius Посмотреть сообщение
Применение map/pair это тот же switch, только список имён функций перенесён из кода в данные.
Это словарь типа <строка, указатель на функцию>
Qt: QMap<QString, func *>
C#: Dictionary<string, delegate...>
Для этого надо в любом случае прописывать все эти списки заранее.
Зачем оно вам надо?
Сама идея намного сложнее, но если коротко будет среда типа терминала в виндовсе. Человек пишет команду - (название функции), жмет ентер, программа ищет в определенной папке одноименную DLL-библиотеку, если ее нет, то говорит пользователю что нет такой функции, если она есть, то подключает ее и выполняет из этой библиотеки основную одноименную функцию, которая в свою очередь выполняет уже какие-то действия.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,399
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 05.02.2015, 15:11

Аааа, так это в корне меняет дело
Сия конструкция называется плагинами.

Каждая библиотека имеет одинаковые экспортируемые функции. Одинаковый интерфейс.
Ваша консолька при запуске перебирает все библиотеки, собирает инфу о них, где какая основная функция, её имя, параметры, и прочее.
При необходимости вызвать функцию по имени выбирается (на основе собранной инфы) нужная библиотека и вызывается её основная функция (C++-ое имя её одинаково во всех библиотеках).
Ответить с цитированием
  (#7 (permalink)) Старый
realgoldman realgoldman вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.02.2015
По умолчанию 05.02.2015, 15:19

Цитата:
Сообщение от Rius Посмотреть сообщение
Аааа, так это в корне меняет дело
Сия конструкция называется плагинами.

Каждая библиотека имеет одинаковые экспортируемые функции. Одинаковый интерфейс.
Ваша консолька при запуске перебирает все библиотеки, собирает инфу о них, где какая основная функция, её имя, параметры, и прочее.
При необходимости вызвать функцию по имени выбирается (на основе собранной инфы) нужная библиотека и вызывается её основная функция (C++-ое имя её одинаково во всех библиотеках).
я немного не понял....
эти основные функции запускаются автоматом при динамическом подключении библиотеки? тогда мне остается только проверить если есть такая библиотека и динамически в рантайме подключить ее? тогда было бы круто
Ответить с цитированием
  (#8 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,399
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 05.02.2015, 15:20

Не автоматом. После загрузки DLL можно найти в ней нужную функцию по имени, если она заранее правильно оформлена. Когда вы сами пишете всё, это не проблема.
Ответить с цитированием
  (#9 (permalink)) Старый
realgoldman realgoldman вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.02.2015
По умолчанию 05.02.2015, 15:29

Цитата:
Сообщение от Rius Посмотреть сообщение
Не автоматом. После загрузки DLL можно найти в ней нужную функцию по имени, если она заранее правильно оформлена. Когда вы сами пишете всё, это не проблема.
а как это сделать?
можно было бы сделать бы по умолчанию какое-то название типа main(), но в тот момент когда появится еще одна библиотека появится дубликат функции... вот я и думал что основная функция должна быть одноименной с названием файла.... так мы хоть будем знать что вызывать...
в прицепе мы вернулись к изначальному вопросу... как запустить функцию название которой может находиться в строковой переменной....
Ответить с цитированием
  (#10 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,399
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 05.02.2015, 15:32

В разных библиотеках может быть функция с одинаковым именем. Область её ограничивается только самой библиотекой, ну и namespace ещё м.б.
Почитайте про плагины.
Ответить с цитированием
  (#11 (permalink)) Старый
realgoldman realgoldman вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.02.2015
По умолчанию 05.02.2015, 15:42

почитаю... спасибо... но может у кого-то появится еще какая-та идея по этому поводу...

Мне еще из сообщества рекомендовали ScriptControl попробовать... тоже надо почитать...
Ответить с цитированием
  (#12 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,399
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 05.02.2015, 15:44

Скриптовые встраиваемые языки типа LUA, или JavaScript.
Если скорость выполнения не важна.
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
realgoldman realgoldman вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.02.2015
По умолчанию 05.02.2015, 15:51

Цитата:
Сообщение от Rius Посмотреть сообщение
Скриптовые встраиваемые языки типа LUA, или JavaScript.
Если скорость выполнения не важна.
вот типа такого... что скажете?
cpp Код:
Variant sc = CreateOleObject("MSScriptControl.ScriptControl"); // #include <ComObj.hpp>
sc.OlePropertySet("Language",WideString("VBScript"));
this->Caption = sc.OleFunction("ExecuteStatement", WideString("MsgBox \"Title\", \"0\", \"Caption\""));
sc = Unassigned;
Ответить с цитированием
  (#14 (permalink)) Старый
realgoldman realgoldman вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.02.2015
По умолчанию 05.02.2015, 15:52

думаете это сильно повлияет на скорость?
Ответить с цитированием
  (#15 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,399
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 05.02.2015, 15:56

Точно не скажу. Избегаю связываться с OLE и прочими, слишком платформо-зависимыми вещами.
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
название игры wicat Компьютерные игры 3 04.04.2012 16:08
Создание текстовой он-лайн игры Настя197 Задания за деньги 0 11.10.2011 04:12
Передача метода переменной в качестве параметра функции ibn_maksimys Python 3 27.03.2011 21:40
Вызов функции по значению переменной С++ free_ex Вопросы начинающих программистов 3 29.12.2010 21:49
Работа с текстовой программой fanglyman Visual Basic 2 08.08.2010 21:51
Забыл название fatei4eff Софт и программы 5 25.04.2010 17:01
Вывод текстовой строки вместо цифр Insomnia Вопросы начинающих программистов 7 20.10.2008 19:12
Необходимо создать подсистему шифрования текстовой информации Pchelka Алгоритмы 1 26.10.2005 21:30
Отображение текстовой информации из поля Description Rondo Visual C++ 2 24.01.2005 21:09
Как прописать возвращение переменной char из функции. JuriS Вопросы начинающих программистов 1 22.09.2004 17:45
Ввести строку текстовой информации в ассамблере Relk Вопросы начинающих программистов 0 27.03.2004 13:42
Как создать текстовой файл Trian C++ Builder 1 20.05.2003 13:53



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов