2011-06-30 30 views
1

在我的工作中我們有VS2008。 在我工作的項目一些合作伙伴,使用VS2010(不能用VS2008)如何在VS2008中使用VS2010內置的dll

他們必須建立一個基於一個dll,我必須使用DLL在我的框架...

我管理構建主應用程序並鏈接dll。 應用程序啓動時,從VS2010 DLL的對象被創建,但 應用程序崩潰,當我試圖刪除這些對象......

Windows已經引發了APP.EXE一個斷點。這可能是由於堆損壞了 ,這表明app.exe或其已加載的任何 DLL中存在錯誤。

你有任何想法如何解決這個問題?

回答

4

您的同事的DLL鏈接到VS2010的運行時庫。您的代碼與VS2008的運行時庫鏈接。

當你從VS2010 dll調用某個函數來分配一個新對象時,它將被分配到該庫的堆上。當你在那個對象上調用「delete」時,VS2008的運行庫會嘗試從它自己的堆中釋放它。由於它們不同,你會得到這個錯誤。

如果你要這樣的混合運行時,你需要的DLL VS2010揭露free()式的功能(只是C++的析構函數),每種類型。在混合使用運行時庫的時候,你應該非常小心其他事情,比如使用STL容器,或者任何類型的「寫時複製」對象。一般而言,避免它更容易。

+0

是的,我知道我應該避免它,但不幸的是這是不可能的....當你說VS2010的DLL,你的意思是vc2010可再發行組件包或其他東西?感謝你的回答! – geo

+0

可重新分發的運行時軟件包或靜態鏈接運行時的dll本身;最終結果是相同的:兩個不同的堆。 – vanza