передача параметров в функцию общего объекта - PullRequest
1 голос
/ 16 декабря 2009

У меня есть c-приложение, которое должно загружать общий объект во время выполнения и вызывать произвольную функцию общего объекта. Общий объект был создан пользователем и дал мне подпись его функции.

 int func(int a, int b, double c)

Я использую dlopen для загрузки объекта и dlsym для получения указателя на функцию общего объекта. Теперь я должен передать параметр в функцию. У меня нет подписи во время компиляции. Какой лучший способ сделать это? Есть ли возможность проверить подпись, прежде чем я вызову функцию в моем приложении?

1 Ответ

2 голосов
/ 16 декабря 2009

Пожалуйста, ознакомьтесь с руководством по указателю на функцию C / C ++ . Он должен ответить на все ваши вопросы.

Что касается проверки во время выполнения: Нет, вы не можете проверить подпись на соответствие, поскольку C не поддерживает отражение . dlsym () обычно возвращает не правильный указатель на функцию, а (void *), который вы должны привести. Использование произвольных общих функций, подпись которых вы не знаете заранее, является признаком плохого дизайна. Мой совет - переосмыслить архитектуру.

...