2011-05-18 85 views
1

本页说明如何使用您的应用程序部署VC++ 2008库的本地副本,以避免必须安装第三方vcredist。这对我很有用,因为它可以让我发送一个压缩文件夹给他们可以运行的用户,而无需使用不喜欢的安装程序。将Visual C++库DLL部署为专用程序集

但是,它不适用于我。我的应用程序不使用MFC,只使用Win32,而使用其他标准C++。我有app/MyApp.exe就是这样......我应该从%PROGDIR%\Microsoft Visual Studio 9.0\VC\Redist\x86复制哪些文件,以及他们应该去哪里?

我正在XP模式虚拟PC上测试这个,当我试图按照页面中的说明操作时,跨文件复制不会导致“应用程序初始化失败”错误。是否有一些我缺少的步骤?

我看看我的表现,似乎预期仅CRT用于:http://pastebin.com/BD4NZMC2

回答

0

最简单的方法来解决该DLL地狱被重新编译应用程序与/ MT编译器标志(而不是默认/ MD )。这将静态链接C运行时库。 如果这是一个独立的exe,这将始终有效。如果不是(即你有你自己的DLL),你必须注意你在同一个模块中分配和释放内存 - 也就是说,如果你的malloc()是一段可执行文件中的内存,并且free()在DLL中相同的指针,它会崩溃 - 因为可执行文件和DLL都会得到自己的堆,而在不匹配的堆上尝试释放()将不起作用。

+0

有一大堆其他库静态链接到我的应用程序;这些都是使用/ MD构建的,我得到链接器错误 - 我必须为它们创建新的构建配置,以使它们可以使用/ MT构建。这是必要的吗? – 2011-05-18 09:59:47

+0

是的,/ MT和/ MD编译的对象不能混合使用。链接器不喜欢它。 – 2011-05-18 10:06:49

+0

我得到了这种技术,避免了分发程序集的需要,但如果有人知道如何使它工作,无论如何,我想知道。如果没有人咬,这个答案可以得到分! – 2011-05-19 08:52:47