gpt4 book ai didi

c++ - 加载 DLL 函数的更好方法?

转载 作者:可可西里 更新时间:2023-11-01 14:44:01 26 4
gpt4 key购买 nike

我觉得有比在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com