給程式新增外掛程式(來自MSDN)

2021-04-01 01:22:03 字數 2593 閱讀 8087

show toc

歡迎來到 msdn >

.*** 開發

發布日期: 12/17/2004

| 更新日期: 12/17/2004

jason clark

本文假設您熟悉 .*** 與 c#

概述

大多數使用者應用程式都受益於可由其他開發人員擴充套件的能力。擴充套件乙個使用者已經很熟悉並針對它進行過培訓的現有應用程式往往比從頭開發更加簡單和有效。因此,可擴充套件性會使您的應用程式更加吸引人。您可以通過支援外掛程式和巨集等功能來使應用程式具有可擴充套件性。使用 .*** framework 可以輕鬆實現這一點,即使核心應用程式不是 .*** framework 應用程式。在本文中,作者將描述 .*** framework 的可擴充套件功能(包括晚期繫結和反射)及它們的使用方式,同時還介紹外掛程式安全注意事項。

想像一下完美的文字編輯器是什麼樣子的。它啟動時間不超過兩秒,支援針對流行程式語言的上下文著色和自動縮排,支援多文件介面 (mdi) 以及很酷並且大受歡迎的選項卡式文件排列方式。構想這種完美的文字編輯器的問題在於完美只存在於旁觀者的眼中。這些功能只是我對完美的文字編輯器的定義,其他人肯定會有不同的標準。也許完美的文字編輯器所能擁有的最重要的功能就是支援豐富的可擴充套件性,這樣任何開發人員就可以使用他們需要的功能來擴充套件應用程式。

可擴充套件的文字編輯器可能支援建立自定義工具欄、選單、巨集,甚至是自定義文件型別。它應該允許我編寫能掛鉤到編輯程序的外掛程式,以便新增自動完成、拼寫檢查及其他諸如此類的美妙功能。最後,完美的文字編輯器應該能讓我用任何語言編寫自己的外掛程式(我個人的首選是 c#)。

理想的可擴充套件應用程式

許多應用程式都可以使用可插入**來修改。實際上,整個 microsoft® office 應用程式套件都可以進行廣泛地自定義,從而人們能夠使用 office 作為平台來編寫完整的自定義應用程式。然而,即便有了所有這些可自定義能力,我還是為 microsoft word(乙個我幾乎天天使用的應用程式)編寫了我的第乙個外掛程式。

原因很簡單。microsoft office 的所有功能並不能完全符合我的標準,包括:

•簡單性。我想用已經很熟悉的非常簡單的軟體工具來操作我的可插入應用程式。

•訪問許可權。我想讓我的外掛程式有權訪問應用程式中內建的某些物件和功能的子集。這種訪問許可權應該是自然而然的,如同是我選擇的程式語言的一部分。

•程式語言。有時我想使用特別選擇的程式語言。

•能力。除了訪問應用程式的文件物件模型 (dom) 外,我還需要乙個豐富的 api。

• 以上列出的事項雖然簡短但近乎苛求。實際上,在 microsoft .*** framework 發行之前,這些標準對普通應用程式而言太過嚴格,是無法做到的。但現在,我可以向您展示如何使用 .*** framework 來將所有這些可擴充套件性功能新增到您的託管和非託管應用程式中。

.*** framework 可擴充套件性功能

可擴充套件性構建在晚期繫結之上,它是指在執行時而非編譯時(更典型的情況)發現和執行**的能力。在這幾年中,有許多技術創新對晚期繫結做出了重大貢獻,其中包括 dll 和 *** api。.*** framework 將晚期繫結的簡單性提高到乙個全新的層次。為加深理解,我們來看乙個非常簡單的**示例。

圖 1 顯示了使用反射在託管物件中執行晚期繫結是如何的簡單。如果您在 latebinder.exe 內構建圖 1 中的**並執行它,則可以將任何程式集(例如從圖 2 中的**構建的程式集)的名稱作為命令列引數傳遞給給它。latebinder.exe 會反射程式集,並在該程式集中建立從 form 派生的類的例項,並使它們成為其自己的 mdi 子類。.*** framework 中的反射使晚期繫結大大簡化。

反射是 .*** framework 的基本工具之一,它促進了可擴充套件性應用程式的開發。它是我這裡提到的可使應用程式可擴充套件的四種功能之一。

公共型別系統 使用 .*** framework 一段時間之後,您可能就會開始認為使用公共型別系統 (cts) 理所當然了。不過,它的確是使該平台中可擴充套件性變得如此簡單的原因之一。cts 定義了所有託管語言都必須遵循的部分物件導向特徵,例如派生的規則、命名空間、物件型別、介面和基元型別。cts 的這些基本規定是針對公共語言執行庫 (clr) 執行的**設定的。

反射 反射是在執行時發現資訊(例如,程式集實現的型別或型別定義的方法等資訊)的能力。之所以反射成為可能,是因為所有託管**都是通過嵌入到程式集中的資料結構(稱為元資料)自描述的。

**訪問安全性 **訪問安全性 (cas) 是 .*** framework 的乙個功能,可以簡化部分受信任**的執行。簡而言之,您可以使用 microsoft .*** framework 的功能來限制晚期繫結**可以訪問的內容,這樣就不用擔心外掛程式破壞使用者的系統。

這就是.*** framework 使可擴充套件性變成現實的四個功能。然而,由於這些功能是如此的酷,所以一篇文章介紹乙個功能不可能將可擴充套件性講得非常透徹。因此,最好的做法是從乙個任務出發引入這個話題。

可擴充套件性入門

這三個階段的每乙個都包含著許多 .*** 技術和應用程式設計注意事項。雖然技術上能夠做到,但 .*** framework 並沒有定義一種特殊的方式來實現可擴充套件性,所以您可以有許多選擇。

載入:在執行時繫結到**

從邏輯上講,可擴充套件性應用程式在載入**之前要先發現它。但反射必須載入**才能發現與它有關的內容,所以實際上發現過程可能要求提前載入**。我們來看一下這是什麼意思。

如何給MyEclipse7,7 5新增外掛程式

最新版myeclipse 7.0正式版與以前的版本有很大不同,包括myeclipse 7.0m2在內的老版本都是myeclipse快捷方式呼叫elipse.exe附加myeclipse的jre。而正式版7.0不再呼叫eclipse.exe,而且在安裝好的目錄下面也沒有了eclipse.exe。完全與...

給事件新增處理程式

給事件新增處理程式的過程 1 定義乙個事件處理方法,其返回型別和引數匹配為事件訂閱的委託的返回型別和引數 2 宣告乙個委託型別的變數,用於事件 3 把委託變數初始化為委託型別的例項,該例項指向事件處理方法 4 把委託變數新增到事件的訂閱器列表中 例如給timer新增事件處理程式,要訂閱事件的委託為e...

給Delphi程式新增版本資訊

我們在用delphi編譯完程式,準備發布產品時,總希望隨產品發布個性資訊以標示產品的 以及開發者等資訊,就像windows的程式一樣,使我們一看屬性就知道他是微軟的產品,這些在delphi中是如何實現的呢?下面我就來給大家演示和說明給exe,dll檔案新增版本資訊的方法。第一,給exe檔案新增版本資...