删除外部依赖项到MFC DLL项目

时间:2010-09-30 14:36:01

标签: c++ dll mfc dependencies external

我在VS2008中开发一个MFC DLL项目。 dll编译好了,我可以从承包商为我开发的GUI exe中调用它。需要为我的dll安装Visual C ++ Redistributables(也许是用C ++开发的exe)

另一家公司希望将我的dll许可用于他们的C ++ exe。他们要求我的dll没有外部依赖。是否可以编译我的DLL以删除所有外部依赖项,如Visual C ++ Redistributables?

设置/ MT是否这样做? 我读过Should I compile with /MD or /MT?这有点意义,但我很担心地狱。

这可以创建exe调用我的DLL的问题吗?我在某处读到了exe和dll需要使用相同的Visual C ++ Redistributables等。

我对C ++有些新意。任何建议表示赞赏。

2 个答案:

答案 0 :(得分:1)

您可以链接CRT的静态版本(是,/ MT),但这非常危险。你必须仔细检查你的出口。确保它们都不返回C ++对象,甚至不返回std :: string(或CString)。或者客户端代码必须发布的任何指针。这会出错,因为客户端将拥有自己的CRT副本并使用不同的堆。这会泄漏返回的对象/指针,当他们的安全堆管理器检测到指针不属于堆时,会使Vista和Win7上的程序崩溃。

关于“外部依赖”究竟意味着什么可能是一个争论的问题。依赖CRT并不完全是外部的。但是,您必须为它们提供在他们使用的相同Visual Studio版本上构建的DLL版本。只有在版本匹配时才能共享CRT。

答案 1 :(得分:1)

为什么不将所有相关dll打包到安装程序包中并发布给您的客户?

我见过一些软件包确实包含了vc的依赖库......