在MSDN我發現下面的描述了兩個屬性:的DllImport - PreserverSig和SetLastError屬性
PreserveSig將PreserveSig字段設置爲true,直接翻譯與HRESULT或retval的值,非託管簽名;將其設置爲false以自動將HRESULT或retval值轉換爲例外。默認情況下,PreserveSig字段爲true。
SetLastError使調用者能夠使用Marshal.GetLastWin32Error API函數來確定執行該方法時是否發生錯誤。在Visual Basic中,默認值爲true(這會增加一些開銷);在C#和C++中,默認值爲false。
我的問題是:這兩者如何相互關聯?假設我將PreserveSig設置爲'false' - 這意味着我應該將HRESULT轉換爲異常 - 如果非託管函數返回表示發生錯誤或沒有錯誤的整數,那麼這怎麼會被轉換爲異常呢?
此外,爲什麼我需要調用GetLastWin32Error方法,如果我以某種方式設法使用PreserveSig提取異常?
親切的問候 PK
我沒有COM對象的經驗,所以讓我再問一個關於創建方法簽名的問題。問題是:當我看到COM函數返回HRESULT時,我可以將我的方法標記爲返回void並設置PreserveSig = false(如您所述),或者設置PreserveSig = true並將我的方法標記爲返回IntPtr以手動檢查返回的代碼? – pkolodziej 2009-04-18 17:42:53