none
關於dll載入的例外 RRS feed

  • 問題

  • 小弟有寫了一些DLL,在載入的時候希望能自行處理例外,不知道那位能幫得上忙~謝謝
    ex:
    private LoadClass as Class

    private sub init()
       loadclass=new Class

    end sub

    compiler前dll是存在的,所以沒問題,但在安裝後,dll如果有錯誤或是遺失的話,目前程式會自己通知錯誤訊息-(您的應用程式發生未處理的例外狀況......無法載入檔案或組件'Class,XXXXX"
    小弟希望能自行處理這個例外,可行嗎?或者有其它方法可以解決,麻煩了,謝謝
    2009年9月11日 上午 07:03

解答

所有回覆

  • private LoadClass as Class
    
    private sub init()
    
       Try
            loadclass=new Class
       End Try
       Catch e As FileNotFoundException 
    
           ' 發生於檔案不存在時
           ' 自行處理的程式碼
    
       End Catch
       Catch e2 As FileLoadException
    
           ' 發生於檔案載入失敗時
         ' 自行處理的程式碼
    
       End Catch
    
    end sub
    

    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    2009年9月11日 上午 07:56
    版主
  • 朱大,可能我沒把問題說明好,Class指的就是DLL內的類別。
    private LoadClass as Class

    為全域變數的宣告。

    當DLL不存在,或是找不到路徑的時候,就會跳出之前說明的錯誤(您的應用程式發生未處理的例外狀況......)
    這裡的try catch並不會抓取到錯誤,這個部份我試過了。還是感謝你。

    我試著將原本執行正常的程式中參考dll改名,重新執行,立刻會彈出預設的錯誤(已經加入try catch),例外處理中的程式並不會執行(try catch無動作)。
    2009年9月11日 上午 09:57
  • HI,

    您可以在應用程式啟動時處理:

    Application物件的ThreadException事件

    AppDomain.CurrentDomain物件的UnhandledException事件

    應該就可以抓到DLL載入錯誤的例外
    2009年9月12日 上午 12:48
  • tihs大,感謝你的回應,兩個方法我都試過了。
    方法一
    還是無法取得相關錯誤。
    方法二
    會處理相關的錯誤,但完成其event後還是會再出現預設的錯誤訊息。

    小弟有試了實行applicationevent的方法,是可以處理相關錯誤,但處理完成後,程式就自動關閉了(能不關閉,出現完整表單就ok了)
    我想要的功能,主要是希望程式能不因dll的缺少而無法開啟(目前會直接跳出預設錯誤後詢問動作-[繼續、結束],小弟希望能跳過訊息後的動作,也就是點選"繼續"後出現完整表單的功能,簡單的說就是不要有預設的錯誤訊息出現)。
    2009年9月14日 上午 08:48
  • 對於提前連結來說,類別不存在就不能執行。

    所以你的需求應該改為 Assembly.LoadFile 及延後連結的方式撰寫。
    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=%22Assembly.LoadFile%22


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 Lolota Lee 2009年9月17日 上午 08:10
    2009年9月14日 上午 09:31
  • 心冷熱情大大,感謝,有點感覺了
    只是可以再進階的說明一下嗎?
    小弟使用的dll內有很多的class,你介紹的方法,我只找到能取出function出來用,但好像沒有針對實作每個class,這一點能不能請你在說明,謝謝
    2009年9月15日 上午 02:04
  • 用 google 搜尋,可以優先看 codeproject 內的範例:
    http://www.google.com.tw/search?hl=zh-TW&q=%22Assembly.LoadFile%22+Create+Class+sample&meta=&aq=f


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年9月15日 上午 02:59
  • 心冷大,感謝你,我已經找到相關的資料了,的確改為動態載入是可行的~
    2009年9月18日 上午 03:05