Форум программистов, компьютерный форум CyberForum.ru

Вызов функции с неизвестным именем - C++

Восстановить пароль Регистрация
 
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
29.07.2012, 15:24     Вызов функции с неизвестным именем #1
Я знаю, что напрямую нельзя вызвать функцию по имени, которое хранится в char*
но, может как-то возможно сделать "финт-ушами"?
Только заранее говорю, что имя функции вообще неизвестно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2012, 15:24     Вызов функции с неизвестным именем
Посмотрите здесь:

C++ Амперсанд перед именем функции
C++ Обратиться к файлу с неизвестным именем, но известным расширением (TXT)
C++ Вызов функции в C++
Вызов функции в возврате значения функции C++
C++ Что значит знак ~ перед именем функции?
C++ Вызов функции
C++ Вызов функции
Вызов функции в параметре другой функции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
29.07.2012, 15:26     Вызов функции с неизвестным именем #2
а где функция находится???
и зачем вызывать неведомую функцию???
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
29.07.2012, 15:39     Вызов функции с неизвестным именем #3
Произвольную ф-ию Вам вызвать не удастся. Не известен потому как список параметров.
Но можно сделать следующее:
C++
1
typedef void (*SomeFunc)(int, float, double);
То есть определяете прототип ф-ии как тип.
Далее если у Вас есть некая ф-ия с таким же прототипом, Вы можете взять ее адрес:
C++
1
SomeFunc tmp = &myFunc;
Где
C++
1
void myFunc(int, float, double);
Таким образом переменной tmp Вы можете присвоить различные ф-ии одного прототипа.
И вызывать любую из них выражением вида
C++
1
tmp(a, b, c);
А вот из char * вытащить ф-ию Вам вряд ли удастся.
Если только она не лежит в библиотеке... Тогда эту библиотеку можно подключить динамическим образом (на этапе выполнения приложения) и импортировать ф-ию, зная ее название. Возможно, даже на уровне char *. В MSVS я не практиковал подобное. В кутах - точно можно. Если интересно - почитайте.

Но в целом суть такая же, как описано выше:
C++ (Qt)
1
2
3
4
5
 QLibrary myLib("mylib");
 typedef void (*MyPrototype)();
 MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
 if (myFunction)
     myFunction();
Yandex
Объявления
29.07.2012, 15:39     Вызов функции с неизвестным именем
Ответ Создать тему
Опции темы

Текущее время: 17:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru