2
假設我有一個visual C++應用程序,它有一個主要的可執行文件和許多dll。我有2個配置版本和調試。混合發佈dll與調試主應用程序exe
我只是想知道這將是使用混合可能產生的影響,我的意思是使用與釋放的主要EXE或調試EXE與釋放的dll調試DLL使用。
感謝
假設我有一個visual C++應用程序,它有一個主要的可執行文件和許多dll。我有2個配置版本和調試。混合發佈dll與調試主應用程序exe
我只是想知道這將是使用混合可能產生的影響,我的意思是使用與釋放的主要EXE或調試EXE與釋放的dll調試DLL使用。
感謝
我認爲主要的潛在問題將是這些DLL不會使用相同的運行時庫的可執行文件。
這意味着你不能共享的運行對象如文件描述符,你不能在一個內存分配和釋放它在其他 - 但如果你遵循最佳實踐,始終這不會是一個問題從它分配的相同模塊釋放內存。
也有可能是一個問題,如果你分享非POD的DLL和可執行之間(一個類的實例,例如)。我不確定在調試和發佈之間是否保證類實例是二進制兼容的。
當您嘗試DUP()在調試主要應用在你得到一個異常(無效參數)釋放DLL後分配的文件描述符。所以在混合釋放和調試時要小心。 –
@MikeLischke:是的,任何使用運行時庫錯誤實例的文件描述符都是無效的。它可以是未分配的描述符,也可以是不同文件對象的描述符。 (沒有什麼能夠阻止兩個運行時庫發送數字相同的描述符。) –
這裏讓我感到驚訝的是,我得到一個異常而不是一個錯誤結果,這對於一個低級運行時API來說是非常不尋常的,它可以給你一些如果您只准備處理返回值,則會產生額外的麻煩。 –