c++ - 棘手的 C 问题。动态函数调用

标签 c++ c function dynamic visual-c++

我正在用 C/C++ 编写一个程序(但不应涉及 c++ 类),它分为两部分。 首先是对线程和进程的基本需求。 二是供用户定制自己的功能。 模块就像,让我困惑的是用户自定义功能。

我的需求如下: 用户可以在给定的文件夹中创建一个新的*.c文件,他们可以编写自己的函数。

在他们制作了自己的功能和编译之后,我可能通过套接字或 http 或 argv 命令为他们提供一个接口(interface)。他们可以唤起他们之前定义的功能。 他们只给我一个像“own_funciton”这样的字符串,然后我调用他们定义的函数。

The question is : how to do this? 

How can i connect the strings and the functions???

我想也许 MACRO 可能是一个解决方案, 我要求用户这样定义他们的功能: 这只是一个例子

BEGIN_FUNCTION (own_funcion)
{
   //function body
}
END_FUNCTION

注意:当用户添加新功能时,整个系统需要重新编译。

您可以在 MACRO BEGIN_FUNCTION 中做一些事情来存储函数字符串和函数指针。 但是我不知 Prop 体怎么写MACRO.. 你有什么建议吗

最佳答案

这听起来像是一个关于如何处理动态库加载的家庭作业相关问题,大多数插件系统都是这样构建的。阅读如何在您的平台中实现动态库加载。

例如,在 Linux 中,您会查看 dlopen/dlclose/dlsym 函数。基本上用户实现一个.so对象,当你的应用程序加载它打开.so文件与dlopen,一旦图书馆被加载,用户输入一个字符串,可以用dlsym查找具体的函数名,通过函数指针调用。使用完库后,使用 dlclose 释放它。

这里有一些库可以提供一些帮助,例如 Boost.Extension,它为底层操作系统调用提供了一个多平台接口(interface)。

关于c++ - 棘手的 C 问题。动态函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5441586/

相关文章:

c++ - 线程池如何让我处理许多客户端连接?

C++0x 类型推断与 boost::enable_if 混淆

c++ - 矩阵到 EulerAngles

javascript - 使用这个简单的 jQuery 声明的 IE8 脚本错误

c++ - 如何在 C++ 中打开文件?

c - RabbitMq C API : emulating "rabbitmqctl cluster_status -n rabbit@<remote hostname>" from C API

c - 用 C 语言编程运算放大器

c - 如何使用 getchar 按字母顺序排列列表

c++ - 如何将 vector 变量传递给函数?

c - 在调用者的返回序列中跳过函数