Как я могу вызвать библиотечную функцию только из ее имени? - PullRequest
1 голос
/ 09 февраля 2011

Я хочу использовать char *function_name = "foo" для вызова foo() из C-программы. Подпрограмма foo() будет находиться в общей библиотеке. У меня нет доступа к любому dlopen и т. Д., Только шаг загрузки для обычного исполняемого файла. Есть ли способ разрешить это имя и загрузить его из общей библиотеки?

Ответы [ 3 ]

5 голосов
/ 09 февраля 2011

Нет.Вы либо используете dlopen и dlsym, либо создаете свой собственный массив имен функций и указателей функций и ищите его таким образом.

2 голосов
/ 09 февраля 2011

Вы не можете сделать это, если у вас нет доступа к именам функций и адресам загрузки.Вы можете сделать это, используя LoadLibrary() и GetProcAddress() в Windows.

В вашем случае я точно не знаю, что у вас есть (вы не упомянули вашу платформу, компилятор и т. Д.) Илиесли это возможно.Однако я сильно подозреваю, что это не так.

0 голосов
/ 09 февраля 2011

Распространенным методом вызова функций по имени является использование таблицы имен и указателей на функции. Предостережение в этой технике заключается в том, что все функции должны иметь одинаковую сигнатуру.

Если вы знаете имена функций, но сигнатуры функций различаются, вам придется использовать и if-then-else лестница.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...