【发布时间】:2010-10-18 11:56:49
【问题描述】:
我有这个程序,我希望其他进程能够调用函数(通过 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 中调用带有参数的函数?
谢谢!
【问题讨论】:
-
你需要签名做什么?客户端是调用函数还是将请求传递给包含 somefunc 的库?一些澄清会有所帮助!