我可以创建一个dll取决于另一个目录中的另一个DLL吗?

时间:2012-10-16 05:56:35

标签: dll shared-libraries

我的程序依赖于Microsoft重新分发程序包,或者更具体,取决于MSVCR100.dll

推荐的方法是在程序运行之前安装redistribute包。但是,我的程序非常小(大约1MB),vcredist.exe大约是5MB,对我的安装程序来说有点太大了。

所以这是另一种方式,根据Microsoft的许可,我们可以将dll安装到我的应用程序文件夹中的子文件夹(\VC\redist\x86\Microsoft.VC100.CRT\)中。所以我的应用程序目录就像:

MyAppFolder\a.exe
MyAppFolder\lib\a.dll
MyAppFolder\VC\redist\x86\Microsoft.VC100.CRT\MSVCR100.dll

我的问题是,如何让a.dll找到位于另一个文件夹中的MSVCR100.dll?

2 个答案:

答案 0 :(得分:0)

您可以考虑将CRT链接为静态库,不会对MSVCRxxx.dll产生依赖,

但你的EXE / DLL会更大。

http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=vs.100%29.aspx

http://msdn.microsoft.com/en-us/library/aa984514.aspx

如果您的项目包含一个EXE / DLL,此解决方案是合适的,但对于更大的项目,您可以在其中创建带有MSVCRT合并模块的MSI包。

答案 1 :(得分:0)

刚刚找到一个可以解决我问题的函数 - AddDllDirectory

是的,我可以将CRT链接为静态库,但在我的情况下,有几个依赖它的库,这意味着每个dll都有一个MSVCR100.dll副本。