我的可執行文件調用了一些我自己編寫的DLL。根據這些DLL使用的第三方C++庫,我無法自由選擇所有DLL的編譯器設置。因此,在一些DLL中,_ITERATOR_DEBUG_LEVEL
被設置爲2(在調試版本中默認),但是在我的可執行文件_ITERATOR_DEBUG_LEVEL
中,根據嚴重的性能問題,它被設置爲0。如何將C++對象傳遞給具有不同_ITERATOR_DEBUG_LEVEL的DLL
當我現在將std::string
傳遞給DLL時,只要DLL嘗試將其複製到本地std :: string obj,應用程序就會崩潰,因爲DLL中字符串對象的內存佈局不同於在我的可執行文件中。到目前爲止,我通過傳遞C字符串來解決這個問題。我甚至寫了一個小類,它將一個std::map<std::string, int>
轉換爲C-Data中的臨時表示並將其轉換爲C-Data中的臨時表示,以便將sich數據傳遞給DLL。這工作。
我該如何克服這個問題?我想傳遞更多不同的類和容器,並且由於幾個原因,我不想與_ITERATOR_DEBUG_LEVEL
= 2一起工作。
摘要:bye bye OO ... – 2011-03-17 14:15:33
完全沒有 - 沒有stl並不意味着沒有OO。您可以使用不包含數據成員的類來創建抽象接口/適配器 - 只有純虛擬方法。在這裏,我發現了一篇有趣的文章:[代碼項目:從DLL導出C++類](http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx#CppMatureApproach) – MacGucky 2011-03-17 14:37:17
不,作爲客戶,您應該**需求**將第三方庫編譯爲可用版本。或者被允許重新編譯自己。這不是一個語言問題,這是一個業務問題。誰長期出售無法使用的圖書館? – 2011-03-17 14:40:47