Предположим, что у меня есть следующая функция:
int func(int a, char* b, float c)
{
return 42;
}
Я - любопытство, если есть возможность вызвать эту функцию без:
func(1, "abc", 2.4)
)Функция написана на C (или C++) и может быть расположена либо в библиотеке (DLL в Windows), либо где-то скомпилирована в текущем приложении. А теперь давайте предположим, что нет проблем с изменением имени.
Однако я знаю следующее:
int
", " char*
", " float
").Я открыт для любых предложений, но я немного боюсь каких-то нижестоящих сборочных хаков, так как я бы хотел, чтобы это было настолько портативным, насколько это возможно.
Я бы предпочел решение C
, и я бы хотел избежать boost::bind
...
Изменить - некоторые пояснения...
Тот, кто "вызывает" "функцию", представляет собой скомпилированную библиотеку сценариев (DLL). Он загружает язык сценариев (исходный файл), который имеет "привязки" к экстернальным "функциям" (те, которые я пытаюсь вызвать), а когда на языке сценариев он встречает "вызов этой внешней функции", он пытается вызвать эту внешнюю функцию, которая может быть в DLL... или в приложении, которое фактически загрузило DLL скриптового языка...
Чтобы иметь возможность вызывать функции с типами параметров, которые не ясны во время компиляции, я боюсь, что вы не придете вокруг упомянутых "узловых сборок уровня".
В случаях, когда переносимость к архитектурам, отличным от x86 или AMD64, не имеет отношения к делу, взгляните на эту замечательную библиотеку. Он позволяет OS-неспецифические способы генерации собственного байт-кода во время выполнения и должен быть самым простым способом выполнить ваши пожелания.
Это все еще бета-версия, однако я использую ее какое-то время, не сталкиваясь с какими-либо проблемами.
dlsym
POSIX).