2012-09-15 153 views
1

我正在創建一個使用非託管API的PowerShell模塊。它的工作方式看起來是這樣的:防止第三方DLL崩潰PowerShell

PowerShell Module 
     | 
     ˅ 
.NET Wrapper DLL 
     | 
     ˅ 
    Native DLL 

這個本地DLL具有通信的操作是否失敗與否的兩種方式 - 通過寫狀態代碼到標準輸出或通過拋出Win32異常。您可以通過調用API的UseExceptions()DontUseExceptions()來指定您的偏好。然而,這兩個選項吸:

  1. 沒有例外,任何時候我做一個成功的函數調用,0得到打印在屏幕上。如果函數調用失敗,屏幕上會顯示一條警告消息。這不僅使檢測錯誤變得困難,而且還將我的模塊輸出混亂到用戶身上。
  2. 有例外,如果有小錯誤,整個PowerShell進程將崩潰,因爲它是Win32異常而不是.NET異常。

有沒有辦法阻止Win32異常崩潰整個PowerShell進程?或者有沒有辦法攔截這個DLL的stdout並自己解析狀態碼?

我使用的API是廣泛使用的Geographic Data Abstraction Library

回答

1

在您的.NET Wrapper DLL中,嘗試捕獲SEHException以查看是否可以捕獲Win32異常。另一種選擇是使用CLI/C++編寫.NET包裝程序,然後使用C++異常處理機制來捕獲異常。