我有一个 c 应用程序,它应该在运行时加载一个共享对象并调用共享对象的任意函数。共享对象是由用户构建的,并给了我他的功能的签名。
int func(int a, int b, double c)
我使用 dlopen 加载对象并使用 dlsym 获取指向共享对象函数的函数指针。现在我必须将参数传递给函数。我现在不在编译时签名。最好的方法是什么?在我的应用程序中调用函数之前是否有机会检查签名?
我有一个 c 应用程序,它应该在运行时加载一个共享对象并调用共享对象的任意函数。共享对象是由用户构建的,并给了我他的功能的签名。
int func(int a, int b, double c)
我使用 dlopen 加载对象并使用 dlsym 获取指向共享对象函数的函数指针。现在我必须将参数传递给函数。我现在不在编译时签名。最好的方法是什么?在我的应用程序中调用函数之前是否有机会检查签名?
请查看C/C++ 函数指针教程。它应该回答你所有的问题。
关于在运行时检查:不,您不能检查签名是否适合,因为 C 不支持反射。dlsym() 通常不会返回正确的函数指针,而是您必须强制转换的 (void *)。使用您事先不知道其签名的任意共享函数是糟糕设计的标志。我的建议是重新考虑架构。