在Microsoft Visual Studio 2015 (v14.0)
我有一個包含3個項目的解決方案。更改運行時庫選項對運行時鏈接的影響
其中兩個項目是DLL,另一個是可執行文件。
可執行文件在運行時加載DLL並調用它們的函數並交換參數;使用Window的LoadLibrary
和GetProcAddress
API。
在Release
模式下,當我設置Runtime Library
我的項目到Multi-threaded DLL
一切工作正常。對於Debug
模式,這是Multi-threaded Debug DLL
。
如果我更改爲Multi-threaded
爲Release
或Multi-threaded Debug
爲Debug
我開始越來越調試斷言錯誤或內存訪問衝突錯誤和其他種類的錯誤。 (當我更改它時,我更改了解決方案中的所有項目。)
我需要使用Multi-threaded
選項,以便可執行文件不需要目標計算機上的C++運行時庫。我該如何解決這個問題?
你寫的東西有一些誤解。地址空間是按進程進行的,並且DLL總是與加載它們的進程共享相同的地址空間,並且與同一進程加載的其他DLL共享同一地址空間。在同一個進程中的任何其他地方,訪問分配在一個DLL函數中的內存是完全安全的。 */*不與*/MT一起工作的是在一個DLL中的代碼中分配內存('new'),然後從另一個DLL中釋放代碼('delete'),因爲使用'/ MT',每個DLL都有自己的靜態鏈接的CRT副本。看例如[這個答案](http://stackoverflow.com/a/8157934)。 – dxiv
@dxiv你是對的,謝謝你的評論。我修改了答案。 –