2013年7月13日 星期六

將VB6 轉換(升級)成 VB.NET

  因專案需要將VB6 開發的應用程式轉換到 .NET,原本打算重新撰寫,可是改寫一樣需遵照原來的作業邏輯,單單重新設計表單及選擇替代的元件所花的時間可能就不短,最後嘗試就利用 VS2008 的專案轉換功能,將VB6轉案直接升級到 .Net 2.0。

專案轉換後,雖然程式碼中有些必須升級或改寫的地方,但 forms 的設計都沒有問題,可是把專換後的專案複製到家裡的環境時,卻有部分 Forms 出現下列錯誤:

類別未登錄 (發生例外狀況於 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))


  奇怪!奇怪! 原本以為是漏COM檔案,可是一再比對,檔案並沒有少啊! 上網找,都說是因為 VS的編譯設定的問題,只要將編譯目標改成 x86 就可以(詳參考:http://www.dotblogs.com.tw/hung-chin/archive/2011/07/30/32306.aspx),可是照改之後,問題依舊。

  仔細看錯誤的地方,VS 報錯是在這一行;
 Me._SSTab2_TabPage0.Controls.Add(Me._mctPic_0)

  有問題的是 _mctPic_0 這個變數沒有定義,找到定義這一行:
 Me._mctPic_0 = New AxMSChart20Lib.AxMSChart

應該是 AxMSChart20Lib.AxMSChart 這個元件的問題,上網查的結果,AxMSChart20Lib.AxMSChart 是在  mschrt20.ocx 裡。

  所以,只要將  mschrt20.ocx 複製到 System32 (如果是 64bit 的Win7 就複製到 SysWOW64 裡),然後以系統管理員身分開啟 cmd ,並切換到 System32 (64 bit是切換到 SysWOW64),然後執行
regsvr32 mschrt20.ocx

問題解決了!

所以,縱使相同的錯誤息訊,也可能是不同的起因!

沒有留言:

張貼留言