我有一些函数,比如int foo(int x)
,我从一个DLL中获得(使用dlsym()
)。所以,目前我的代码看起来是这样的:如何为DLL函数编写(通用)自我替换存根函数?
void foo(int x) {
void (*foo)(int x);
foo = dlsym(dll_handle, "foo");
int y = foo(x);
printf("y is %d", y);
}
我想什么是(像)此代码工作:
void bar(int x) {
int y = foo(x);
printf("y is %d", y);
}
让foo()
是调用的DLL函数存根(但不必每次都搜索DLL)。
- 实现单一功能的最佳方法是什么?
- 对于许多功能的情况,我将如何避免写一堆复制粘贴存根?考虑到签名,宏观解决方案可能会非常棘手。也许一个基于C++ 11的可变参数模板为基础的东西?
我有一个解决方案的基本思路1.在下面的答案中,但我不太确定,我想在这里采用'最佳实践'的方法。
这肯定会起作用,但当不再需要时,它不会用'dlclose(3)'卸载共享库。这可能是好的,但是如果你想能够卸载库,你需要一个deinitialization函数来调用dlclose()并将dll_foo变量设置为NULL。 –