我有一些功能,比如我从DLL获取int foo(int x)
(使用dlsym()
)。所以,目前我的代码看起来像这样:
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)。
我对以下答案的解决方案有一个基本的想法,但我不太确定,我想在这里采用“最佳实践”方法。
答案 0 :(得分:1)
你已经在问题中回答了自己。一个小的改进可能是检查dll的“更新”,如果有的话。
int foo(int x) {
static void (*dll_foo)(int x) = NULL;
static void *foo_dll_handle = NULL;
if (dll_foo == NULL || foo_dll_handle != dll_handle) {
dll_foo = dlsym(dll_handle, "foo");
foo_dll_handle = dll_handle;
}
return dll_foo(x);
}
答案 1 :(得分:0)
对于单一功能的情况,我认为这样的事情应该是正确的:
int foo(int x) {
static void (*dll_foo)(int x) = NULL;
if (dll_foo == NULL) {
dll_foo = dlsym(dll_handle, "foo");
}
return dll_foo(x);
}