早期的程式平台當然是無法直接使用 .Net 的 Class Library,所以需要寫成 COM 元件;保哥的「用 .NET 寫 COM 元件的注意事項」這篇文章幫助甚大,不過因時空環境的差異,略為修改了部分步驟以符合實際狀況(粗體字為不同的步驟):
1.開啟 Visual Studio 2010
2.新增 類別庫(Class Library) 專案
3.在專案屬性中的「建置」(Build)頁籤,勾選「註冊 COM Interop」 (Register for COM interop)
4.註冊 COM 的 Module 名稱為 Class 的 [Namespace].[ClassName]
5.類別(Class)要引入 System.Runtime.InteropServices 命名空間
6.在類別定義的地方要加上 [ComVisible(true)] 屬性
程式撰寫上沒有碰到特別的困難,接著進行「手動部署」:
gacutil /i DownloadCOM.dll Regasm.exe DownloadCOM.dll /tlb:DownloadCOM.tlb /register但遇到這個錯誤:「無法將組件新增至快取: 嘗試安裝沒有強式名稱的組件」。
保哥在回應裡提及:「要將組件註冊進 GAC 是一定要設定強式名稱金鑰的」
所以對專案進行「簽署」動作,產生一組金鑰:
7.在專案屬性中的「簽署」頁籤,設定強式名稱(Strong Name)金鑰。(我是直接「新增」)
這樣就OK了嗎?
當然.......沒有! (笑)
由於 Regasm.exe 這個執行檔,要安裝 Visual Studio 或是 Windows SDK 才會有。
測試環境並沒有此執行檔,為了不增加部署上的麻煩(其實是不懂趕快找台階下...XD),後續步驟與保哥不太相同,而是採用「安裝專案」來進行「自動部署」:
8.新增「安裝專案」
部署之後,舊的應用程式配合修改引用的DLL就大功告成!!
非常謝謝保哥的文章,減少我許多摸索的時間,藉此也學到不少COM元件的眉眉角角。
為了救火,並沒有深入研究相關原理,之後有時間的話,想要改寫成免註冊的COM Interop,留下一些線索供以後參考。
參考連結:
COM Interop:
- 用 .NET 寫 COM 元件的注意事項
- COM Interop 簡介
- 管理組件和資訊清單簽署
- HOW TO:簽署組件 (Visual Studio)
- [.NET] 有關強式名稱 (Strong Name) 的兩三事
- HOW TO:註冊 COM Interop 元件
- Regasm.exe (組件登錄工具)
免註冊的COM Interop:
FoxPro 介接 COM Interop
- Using .NET Components via COM from Visual FoxPro (or other COM client)
- Passing objects between FoxPro and .NET COM Components
.Net 下載檔案方法:
沒有留言:
張貼留言