У меня есть эта программа, которую я хочу, чтобы другие процессы могли вызывать функции (через сокеты Unix). Протокол сообщений очень прост: имя функции, сигнатура функции и буфер (char *), который содержит параметры.
Когда модуль в моей программе хочет разрешить доступ к функции, он регистрирует имя и подпись в библиотеке. Проблема, с которой я сталкиваюсь, заключается в физическом вызове функции после поступления запроса. Я посмотрел на RPC и java RMI-подобные библиотеки, но для этого требуется, чтобы я генерировал заглушки для переноса вызовов. Система, над которой я работаю, очень динамична, и мне также приходится взаимодействовать с кодом других людей, который я не могу изменить.
Таким образом, в принципе, функция может выглядеть следующим образом:
int somefunc(int someparam, double another)
{
return 1234;
}
сейчас я регистрируюсь в библиотеке:
// func ptr name signature
REG_FUNCTION(somefunc, "somefunc", "i:id");
Когда приходит запрос, я делаю некоторую проверку на наличие ошибок, и после подтверждения я хочу вызвать функцию. Итак, у меня есть переменные:
void * funcptr = (the requested function);
char * sig = (the function signature);
char * params = (a buffer of function parameters);
//note that the params buffer can hold data types of arbitrary lengths
Как я могу вызвать функцию с параметрами в C?
Спасибо!