单个DLL入口点,用于许多功能

时间:2013-11-25 04:37:32

标签: c++ dll entry-point

在常规DLL中,DLL中的入口点和函数通常是1:1的映射。我有一个有大约50个函数的DLL。维护所有这些都是件苦差事,如果签名或类型发生变化,那么它们都必须更新等等。

我正在考虑为它们创建1个入口点并发送一个代码,该代码指向单个入口点,以确定在DLL中调用哪个函数。这会导致瓶颈等问题,特别是在线程安全的DLL中吗?我无法想到任何缺点,因为这种方法会模仿COM条目和/或查找VTABLE或类似的一个入口点。

例如:

在普通的DLL中,可能会导出以下三个函数:

Func1
Func2
Func3

所有人都有不同的入口点

建议的解决方法:

来电者将Func1(iCode)调入DLL

在DLL地图Func1中导出iCode到Func2或Func3或Func4,... Func50等。

这样,只有1个签名(有明确的链接)来维护而不是50.我无法预见到这里有任何真正的瓶颈。我错过了什么明显的东西吗?

1 个答案:

答案 0 :(得分:2)

你提出的转变不会改变任何事情。这些函数仍然是事实上的函数,可以改变参数等等。

选择表中函数的数字只是寻址函数的另一种形式。

将要发生的第一件事是程序员使用显式的“ioctl-like”调度与函数编号不会非常喜欢它,并且他们将编写隐藏调度的存根例程,这将使他们的代码更具可读性,让他们做一些事情,比如在各个函数上放置断点。那些包装存根可能与原始函数具有完全相同的签名,因此您将回到正方形。

哦,在Windows上,DLL中的函数已经由数字索引解决了! .def文件为名称或类似名称分配序号。 Look at this MSDN entry.