1. 程式人生 > >dll中介面中使用std::string和std::vector

dll中介面中使用std::string和std::vector

最近在windows下封裝dll給客戶,介面引數型別都是std::string,直接在release模式下生成,客戶也沒什麼反饋。但是自己線下在debug模型下測試的時候引數始終傳遞不過去,除錯覺得記憶體很詭異。

結果就是:

STL使用模板生成,當我們使用模板的時候,每一個EXE,和DLL都在編譯器產生了自己的程式碼,導致模板所使用的靜態成員不同步,所以出現數據傳遞的各種問題,下面是詳細解釋。

原因分析:
一 句話-----如果任何STL類使用了靜態變數(無論是直接還是間接使用),那麼就不要再寫出跨執行單元訪問它的程式碼。 除非你能夠確定兩個動態庫使用的 都是同樣的STL實現,比如都使用VC同一版本的STL,編譯選項也一樣。強烈建議,不要在動態庫介面中傳遞STL容器!!