对于语言,通过用户给定的模块/库/代码进行插件或扩展运行时代码的常用方法是什么?我在想C / C ++,但其他语言如何做也可能适用。
答案 0 :(得分:0)
答案 1 :(得分:0)
一种方法是将模块编译成动态对象,主程序以dlopen()
打开。然后使用dlsym()
查找模块必须定义的特定初始化函数,并调用它。例如,您可能会说foo.so
中存储的模块必须定义一个名为module_foo_init()
的函数。
然后,模块的init例程通常调用主程序提供的函数来为某些事件或钩子注册处理程序。
答案 2 :(得分:0)
我在大多数语言中使用的一般方法:
设计最后一部分是大多数工作的来源。什么叫或挂钩,或者应该允许什么?如何注册,它们只是功能,可能是空的,还是会有某种“挂钩注册”?如果是后者,那将如何工作(我通常将一个对象传递给可用于注册钩子的构造函数)?