2015-09-18 25 views
1

我有一個Windows DLL的投擲std::system_error與類別std::system_category()可以在多個DLL中使用std :: error_category嗎?

如果他們被抓到的dll裏面,沒問題,我可以用std::error_condition'比較。但是,如果我在我的exe文件中鏈接到dll,那麼比較總是失敗,因爲該上下文中的std::system_category()不是==捕獲的異常中的那個。

我竭力要明白,如果這應該工作,並有一個錯誤,或者如果這不應該被支持?

這兩個DLL和EXE鏈接到相同的DLL版本的CRT。

而且,如果DLL和EXE鏈接到CRT的靜態版本,我想這不會預期工作?

我讀this description of std::system_category,(重點煤礦):

獲取到靜態錯誤類別對象由操作系統報告的錯誤 參考。

回答

2

這是在Visual C++ 2013中的錯誤它是固定在Visual C++ 2015

+0

好,感謝。我得到了我的問題的第二部分錯誤,也許你也知道答案:「f DLL和exe鏈接到CRT的靜態版本,我想這不會有用嗎?」 –

+0

@ScottLangham無論你如何鏈接事物,這在Visual C++ 2013中都不會起作用; 'operator =='會比較兩個不同模塊中'error_category'對象的地址並返回'false'。在Visual C++ 2015中,如果兩個模塊都鏈接到Visual C++庫DLL,則_will_將工作。如果您將Visual C++ 2015庫靜態鏈接到每個模塊,那麼這仍然會發生作用,儘管這樣做非常不可取, –

相關問題