在常规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.我无法预见到这里有任何真正的瓶颈。我错过了什么明显的东西吗?
答案 0 :(得分:2)
你提出的转变不会改变任何事情。这些函数仍然是事实上的函数,可以改变参数等等。
选择表中函数的数字只是寻址函数的另一种形式。
将要发生的第一件事是程序员使用显式的“ioctl-like”调度与函数编号不会非常喜欢它,并且他们将编写隐藏调度的存根例程,这将使他们的代码更具可读性,让他们做一些事情,比如在各个函数上放置断点。那些包装存根可能与原始函数具有完全相同的签名,因此您将回到正方形。
哦,在Windows上,DLL中的函数已经由数字索引解决了! .def
文件为名称或类似名称分配序号。 Look at this MSDN entry.