我们用C / C ++,其被分解成单个EXE和多个DLL的应用程序。 每个这些DLL都利用相同的静态库(的utilities.lib
)。
在公用事业静态库的任何全局变量实际上将在应用程序中运行时有多个实例。 会有每个模块的全局变量(即DLL或EXE)是的一个副本utilities.lib
已被链接到。
(这是所有已知的和好,但它的价值会超过上库DLL中的情况下如何静态行为的一些背景。)
现在我的问题。我们要改变utilities.lib
,使之成为一个DLL。 它正在成为非常庞大和复杂,我们希望它在DLL的形式,而不是分配.lib
形式。 问题是,这一个应用程序,我们希望保留每个应用程序的DLL有它的图书馆事业中的全局变量的自己的副本目前的行为。 你会如何去这样做? 其实我们并不需要这个对所有的全局变量,只有一些; 但如果我们得到了所有它也没有什么关系。
我们的想法:
- 有迹象表明,我们所关心的,我们可以换他们每个人,做的试图找出哪些DLL正在调用它的一些时髦的绝招一个访问的库中没有的全局变量。 想必大家可以步行调用堆栈,并捞出
HMODULE
,直到我们找到一个不是为每个功能utilities.dll
。 然后,我们可以返回取决于调用DLL的不同版本。 - 我们可以授权呼叫者之前调用任何功能设定一个特定的全局变量(也许还线程局部)
utilities.dll
。 然后,公用事业DLL可以使用这个全局变量的值来确定调用上下文。 - 我们可以发现装载的一些方法
utilities.dll
在运行时多次。 也许,我们需要在编译的时候进行多次重命名副本,使每个应用程序的DLL可以有它的实用程序DLL的自己的副本。 这否定了一些首先使用DLL的优点,但也有其仍将受益不需要这种“静态库”式的行为和其他应用程序utilities.lib
成为utilities.dll
。