我的主程序将加载一个名为hello.so的简单动态库
主要
void* handle = dlopen("./hello.so", RTLD_LAZY);
在主 中,传递一个名为测试的回调函数(在main.h中的某个地方定义)并从动态调用hello()图书馆
typedef void (*callback)();
typedef void (*hello_t)( callback);
/* do something */
hello_t hello = (hello_t) dlsym(handle, "hello");
hello(testing);
在动态库中,
#include
#include "main.h"
extern "C" void hello( void (*fn)() ) {
/*do something and then invoke callback function from main */ fn();
}
除了使用回调之外,还有其他方法可以允许从动态库中调用/使用main的函数/数据吗?
答案 0 :(得分:2)
不,在我看来,这是这样做的首选方式。我能想到的任何其他方式都涉及让DLL知道它所链接的程序中的对象,这很可能是不好的做法。
关于数据,只是提醒您虽然没有提出要求,但通常最佳做法是复制需要存储的任何数据,如果它通过库/程序边界传递的话。如果您使用的数据库的生命周期由程序控制,您可能会陷入完全混乱。反之亦然。