2012-07-14 39 views
0

我所擁有的是一個由3層組成的項目。基礎層是一組本地C++靜態庫,它們是圖形,音頻等遊戲引擎的核心組件。靜態庫導致有效的堆指針聲明

中間層將所有這些組合在一起形成另一個靜態庫,這是引擎本身。原因是因爲我想將引擎編譯爲可執行的分發版本,但也可以將其引入最頂層。

頂層是設計用於快速創建遊戲內容.NET應用程序。我想免費分發Studio,並將Engine.exe用於商業用途。因此,我爲什麼要創建引擎到庫中。

某處前進的道路上的一個錯誤是通過編譯階段獲得。該engine.exe工作正常,但是.NET應用程序中斷當我添加:

#include <string> 
using std::string; 

該方案獲得通過,沒有錯誤編譯階段,但然後爆炸它到達第一個斷點之前,其實它不」我甚至可以從我所知道的主要功能中找到答案。要麼它優化了它或其他東西。我得到的錯誤是調試斷言_CrtIsValidHeapPointer(pUserData)。它在dbgheap.c的1516行。我知道這不是問題,但我希望有人認識到這一說法,並可以提供幫助。

我最好的選擇是,這個問題是值得做的,我如何鏈接庫,也是編譯器設置,我已經嘗試不同的設置,沒有刪除了這個問題。如果任何人有任何這方面的經驗,這將是偉大的,如果你需要知道更多我會很樂意發佈更多的信息。

+0

我希望你的意思是你加入'的std :: string'東西到C++代碼。 – Linuxios 2012-07-14 15:18:40

+0

你到底如何將lib鏈接到.NET項目?請注意,編譯的DLL和應用程序的編譯設置必須完全相同(包括編譯器版本等)以確保類大小,字節對齊等相同。 – 2012-07-14 15:20:35

+0

謝謝查理,我會仔細檢查一下。我已經嘗試將所有庫切換到/ clr是否還有其他會影響它的設置?哪些是我需要注意的?我所知道的所有庫都來自我在大學時做過的一個實驗室。 是Linuxios,我通過逐個引入引擎頭文件來縮小問題範圍。與我使用的XML Parser相關的東西似乎會導致這個問題,那就是當我測試std :: string時,所有其他頭文件都被註釋掉了。 感謝您的幫助迄今爲止:) – Gigaros 2012-07-16 12:14:22

回答

0

我不知道爲什麼這工作,但答案here的伎倆。

解決的辦法是將__DllMainCRTStartup @ 12添加到屬性|中的'強制符號引用'鏈接器|輸入包含靜態庫的C++ /ÇLI項目。