- MSDN 的定義
- What is a ProgID and How Do I Change It?
- How to determine the Path for an Office Application?
簡單的說,用 VBScript / Javascript Create COM / ActiveX object 時,通常會寫以下的程式:
Dim objWord as object = CreateObject("Word.Application")
其中的 "Word.Application" 就是所謂的 ProgID。
上述第二個參考資料很清楚的解釋了 ProgID 在 COM / ActiveX 裡的重要性,
如果需要在 ASP 或者其他非微軟的語言去 Create COM / ActiveX 物件時,
就需要對 ProgID 有一定程度的了解。
不過對第二個參考資料中,因元件新增功能而產生的 "change ProdID" 的需求,
倒是有其他的作法可以避免 COM 元件升級帶來的麻煩,
只要元件裡面的 public sub/function 的 interface 不變,基本上只要把版本號更新,
runtime 的時候就會抓到最新版本的元件,也不需要去修改 ProgID,
由於Create物件的時候 ProgID 通常都是寫死的(除非原始程式考慮的很周到,用類似 web.config 的方式將 ProgID 存在外部檔案),
不然元件每升級一次,就要全文取代是很痛苦的,ASP 時代根本沒有能跟 VS 相提並論的 IDE (除了 UltraEdit 勉強堪用)。
但是這樣到底要怎麼增加新功能呢?其實只要預留一個 public sub / function,
而這個 function 主要的作用就是接收一個指定 provate sub / function 的字串,
然後根據這個字串來執行指定的 function,這樣就可以了。
新增的功能以 private sub / function 的方式加到舊有的元件中,
而外部的 ASP 程式,因為新增功能本來就要寫新的程式去呼叫,
只要把本來呼叫舊有 sub / function 的程式改為呼叫上述預留的 public sub / function,再把新增的功能的 sub / function name 丟進去就可以了。
至於第三點的參考資料,則是說明到底如何在 registry 中找出 Office 應用程式的 ProgID,而後進一步找出執行檔的 physical path,看來不只是 Office 是採用這樣的機制,只要是在 Windows 平台,很多其他廠商的軟體也是用類似這樣的機制,如 Adobe 等等。
Windows registry 裡面有很多有趣的東西,有空的時候應該多找些相關資料來研究一下...
沒有留言:
張貼留言