2011-05-18 47 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