用C 實現的一種外掛程式體系結構 概述

2021-05-21 23:12:08 字數 1021 閱讀 6874

這裡有兩個子系統,它們使用」 server」作為字尾。第乙個server內部維護乙個有效影象載入器的列表,每次當使用者希望載入一幅時,影象載入器被一一查詢,直到發現乙個特定的實現可以處理特定格式的。另乙個子系統有乙個graphicsdrivers的列表,它們作為renderers的工廠來使用。可以是direct3dgraphicsdriver或是openglgraphicsdrivers,它們分別負責direct3drenderer與openglrenderer的建立。引擎提供有效的驅動列表供使用者選擇使用,通過安裝乙個新的外掛程式,新的驅動也可以被加入。

版本在上面兩個可選擇的方法中,不強制要求你把特定的實現放到外掛程式中。假如你的引擎提供乙個讀檔器的預設實現,以支援自定義檔案包格式。你可以把它放到引擎本身,當storageserver 啟動時自動進行註冊。

現在還有乙個問題沒有討論:假如你不小心的話,與引擎不匹配(例如,已經過時的)外掛程式會被載入。子系統類的一些變化或是外掛程式管理器的改變足以導致記憶體布局的改變,當不匹配的外掛程式試圖註冊時可能發生衝突甚至崩潰。比較討厭的是,這些在除錯時難與發現。 幸運的是,辨認過時或不正確的外掛程式非常容易。最可靠的是方法是在你的核心系統中放置乙個預處理常量。任何外掛程式都有乙個函式,它可以返回這個常量給引擎:

// somewhere in your core system

#define myengineversion 1;

// the plugin

extern int getexpectedengineversion()

在這個常量被編譯到外掛程式後,當引擎中的常量改變時,任何沒有進行重新編譯的外掛程式它的 getexpectedengineversion ()方法會返回以前的那個值。引擎可以根據這個值,拒絕載入不匹配的外掛程式。為了使外掛程式可以重新工作,必須重新編譯它。當然,最大的危險是你忘記了更新常量值。無論如何,你應該有個自動版本管理工具幫助你。

PHP中外掛程式機制的一種實現方案

乙個健壯的外掛程式機制,我認為必須具備以下特點 外掛程式的動態監聽和載入 lookup 外掛程式的動態觸發 以上兩點的實現均不影響核心程式的執行 要在程式中實現外掛程式,我們首先應該想到的就是定義不同的鉤子 hooks 鉤子 是乙個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條件。它的邏輯...

PHP中外掛程式機制的一種實現方案

原理講了一大堆,下面看看我的實現方案 外掛程式經理pluginmanager類 stblog pluginmanager class 外掛程式機制的實現核心類 package stblog subpackage libraries category libraries author saturn c...

PHP中外掛程式機制的一種實現方案

乙個健壯的外掛程式機制,我認為必須具備以下特點 要在程式中實現外掛程式,我們首先應該想到的就是定義不同的鉤子 hooks 鉤子 是乙個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條件。它的邏輯原理如下 當系統執行到某個鉤子時,會判斷這個鉤子的條件是否滿足 如果滿足,會轉而先去呼叫鉤子所制定...