我正在處理一些大型非託管庫的包裝。幾乎所有的函數都可以在內部調用一些錯誤處理程序。默認錯誤處理程序向控制檯寫入錯誤並調用abort()函數。這種行爲對於託管庫來說是不可取的,所以我想用我自己的缺省錯誤處理程序替換它,只會拋出一些異常並讓程序在處理此異常之後繼續正常執行。必須在調用任何包裝函數之前更改錯誤處理程序。
包裝庫是用託管的C++編寫的,具有到包裝庫的靜態鏈接,所以沒有像「具有數百個dll導入的類型」那樣存在。我也找不到一個由wrapper庫中的所有東西使用的類型。所以我不能通過在一個單一類型中定義靜態構造函數來解決這個問題,這將執行我需要的代碼。在程序集上執行代碼加載
我目前看到解決該問題的方法有兩種:
這樣定義Library.Initialize()必須由客戶端調用之前的一次他的代碼將使用包裝圖書館的任何部分一些靜態方法。
找到每個頂級函數使用的類型的最小子集(我認爲這個子集的大小將類似25-50類型),並添加靜態構造函數調用Library.Initialize(這將是在這種情況下內部)到這些類型的每一個。
我讀過this和this問題,但他們並沒有幫助我。有沒有解決這個問題的適當方法?也許有一些很好的黑客可用?