我觉得有比在 typedef 中拥有数百个签名然后通过 GetProcAddress 加载指针更好的方法。据我所知,加载 DLL 函数时它是最简单的,但也很麻烦。
有没有更简单的方法来加载 DLL 函数?具体是大量的Winapi和Tool Help库函数?我知道您可以只“包含一个 .lib”,但我觉得那样会导致不必要的膨胀;我也无法访问源代码(尽管 Jason C 提到可以从 .dll 转到 .lib)。
我正在寻找为此编写一个库。我觉得主要障碍是处理具有不同签名的函数;或者这正是为什么每个人都使用 typedef 而不是“一些奇特的循环”来加载他们的 DLL 函数的原因?
最佳答案
您的函数必须以某种方式声明,因此您需要函数签名。但是,如果您觉得自己在重复函数签名,则可以使用 decltype(&func_name)
来消除重复(给定一个具有相同目标签名的函数 func_name
)。您可以将其包装在宏中以使其更可口。
另一种常见的方法是将所有函数指针放入一个大结构(或一堆特定于任务的结构),然后加载一个指向该结构的指针(例如,通过加载一个返回该结构指针的函数) .这看起来像下面这样:
通用 header
struct func_table {
void (*f1)(int);
int (*f2)(void);
};
动态链接库
static struct func_table table = {
&f1_Implementation,
&f2_Implementation,
};
DLLEXPORT struct func_table *getFuncTable(void) {
return &table;
}
使用 DLL 的程序
static struct func_table *funcs;
void loadFuncTable() {
struct func_table (*getFuncTable)(void) = GetProcAddress(..., "getFuncTable");
funcs = getFuncTable();
}
/* call funcs->f1(n) and funcs->f2() */
关于c++ - 加载 DLL 函数的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18029089/