2013-03-14 56 views
1

我有VS2010,我需要構建應用程序。 另外我有.lib和.h用.200和.200構建的.dll。 這個庫取決於log4cxx.dll(我建立了2010並下載了2005二進制文件)。 當我調用庫接口方法返回對構建對象的引用時,它拋出AV異常。我無法用另一個版本構建我的應用程序,我已經嘗試更改爲Multithreaded調試我的應用程序類型。跨MSVCRT版本分配C++對象

回答

1

您正在獲取的對象可能有另一個內存佈局。 如果您正在跨運行時邊界傳遞C++對象,則應確保接收對象具有相同的佈局。例如,如果VS2005編譯器重新排序它的字段進行優化,VS2010以其他方式完成。或者你使用的一個類(例如std :: string)在版本之間改變。閱讀如何從COM方法返回對象。

還擁有一個運行時對象的分配和釋放的另一個問題...

作爲一個解決方案,您可以嘗試安裝VS2005,但你最終同

+0

形勢更加沒有保障興趣:我有VS2005 DLL,這取決於log4cxx VS2008,我試圖從VS2010鏈接庫。它崩潰在這樣的一個點:我在應用程序中創建矢量,並將其傳遞給庫,並在發佈時崩潰 – deeptowncitizen 2013-03-14 13:31:27

+0

@deeownowncitizen這是非常糟糕的情況:)但正如我所說,傳遞的對象,並非專門爲此設計的std :: vector不是)在運行時之間是危險的。即使使用VS的一個版本,您也可能會遇到錯誤,例如,如果一方定義了SECURE_SCL而另一方不是。對象會有所不同。 – kassak 2013-03-14 13:37:17

+0

我想這裏是另一件事:我在我的應用程序堆棧上創建矢量,並通過引用該函數(庫中的const方法)來傳遞它。所以這裏不應該是一些內存問題。我對嗎?庫只是叫我的記憶矢量push_back – deeptowncitizen 2013-03-14 13:56:44