考虑这种情况:
我正在创建一个DLL(我们称其为dllA),该DLL又调用了其他DLL中的函数(我们将其称为这些dllX,dllY和dllZ)。如果其他人想使用dllA,他们也需要dllX,Y和Z的副本。
有没有一种方法可以生成dllA,从而使dllX,Y和Z中所需的功能链接到dllA中?我不知道这是否是正确的术语,但这叫做“静态链接DLL”吗?
我正在寻找一个简单的解决方案。如果简单地将dllX,Y和Z串联在一起,然后以某种方式将其附加到dllA,我会感到满意。
但是我有一种不好的感觉,那就是没有简单的解决方案。
我在Windows上,使用VS。
谢谢!
最佳答案
您不能静态链接DLL,只能静态链接LIB。 DLL是自包含的,并且具有静态成员和DllMain加载/卸载依赖关系,这意味着它们无法拆分为包含函数或链接为其他可执行文件。
您应该根据需要创建一个部署所有适当的dll的安装程序。
如果您真的认为这很重要,并且不能依靠应用程序安装程序,则可以创建一个包装器,将所需的dll(A,X,Y和Z)嵌入为资源,并在运行时提取它们并将其写入用户配置文件中的磁盘中。临时文件夹,然后加载提取的dllA并将所有传入的函数调用推迟到加载的dllA。某些sysinternals工具使用类似的技术从x86镜像中提取应用程序的x64镜像,并将其重新启动为64位进程,而无需附带两个单独的exe。