2009-09-15 31 views
0

我有一個非託管的c + +應用程序,提供了一個自定義_matherr處理程序。當此應用程序在非託管DLL中加載並運行代碼時,如果存在Math錯誤(例如asin(100.0)),則會調用自定義_matherr函數並且一切正常。我可以覆蓋C++/CLI DLL中的_matherr嗎?

但是,我現在正在嘗試在C++/CLI中創建一個NUnit測試DLL,該DLL載入相同的非託管DLL並運行與上述應用程序相同的代碼。我想要做的是將_matherr函數添加到C++/CLI dll中,這樣當發生數學錯誤時,我可以執行一些自定義處理程序邏輯。

C++/CLI dll編譯得很好,定義了_matherr函數,但是當我強制從非託管dll發出數學錯誤時,_matherr函數不會被調用。

這不被C++/CLI支持嗎? MSDN文檔似乎說,所有C運行時間都支持_matherr(連接到包含/ clr運行時的運行時列表)。

回答

3

我的經驗是,如果在dll中完成定義_matherr不起作用。它必須在可執行文件中定義。

我甚至見過編譯器,當你試圖添加_matherr在DLL中,不會鏈接它,因爲他們沒有看到任何人提到它。

0

也許您需要類似代理dll的東西,將每個函數調用傳遞給原始的dll,除了那些你想要處理的東西外。

相關問題