我有一個帶有兩個項目的VS 2010 C++解決方案,一個生成一個DLL,另一個生成DLL函數的驅動程序。以下全部代碼無法在DLL中分配std :: string
char cstring [256];
strcpy (cstring, "C String");
std::string string1 = "Test String";
std::string string2 (string1);
std::string string3;
string3.assign (cstring);
在驅動程序中運行良好。但是,如果將相同的代碼放在DLL項目的任何位置,則string1,string2和string3都不能成功賦值。大多數情況下,調試器將它們顯示爲Bad Ptr。看起來他們沒有很好地分配在內存中。
我試圖把std :: string作爲類成員字段,自動變量和靜態變量。但是沒有一種方法按預期工作。有人能幫我找出原因嗎?
標準DLL問題,發生在您的DLL和EXE不使用完全相同的標準C++庫時。可以像構建在Debug中的EXE一樣簡單,因此使用msvcp100d.dll和Release中構建的DLL,從而使用msvcp100.dll。用/ MT而不是/ MD來建立是另一個傳統的錯誤。這兩個項目都必須使用*完全相同的編譯器版本和編譯設置,因此只能使用該庫的一個副本。使用調試> Windows>模塊進行診斷。 –
可以是真的。但很難找出哪些選項用於構建其他庫。今天我發現驅動程序和DLL可以在我的VS 2010環境以外的安裝中沒有任何問題的情況下運行。所以,這聽起來是一個運行時間問題。 – Lucius
那麼,如果你不知道那麼不匹配的可能性會增加到99.9%,那麼從他們的DLL接口暴露std類型的程序員需要有一個電話,一定要使用一個。 –