2009-08-13 84 views
0

對於語言通過用戶給定的模塊/庫/代碼......來執行插件或擴展運行時代碼的常見方法是什麼?我在想C/C++,但其他語言如何做到這一點也可能適用。插件/運行時擴展體系結構

回答

0

一種方法是將模塊編譯爲動態對象,主程序以dlopen()打開。然後它使用dlsym()來查找模塊必須定義的特定初始化函數,並調用它。例如,您可能會說存儲在foo.so中的模塊必須定義一個名爲module_foo_init()的函數。

模塊的init例程通常會調用main程序提供的函數來註冊某些事件或鉤子的處理程序。

0

OSGi是一個廣泛使用的Java組件框架,也是Eclipse框架的基礎,它也解決了可插入的UI。

0

我在工作中的大多數語言這樣做的一般方法:

  • 你有兩個二進制文件,你的主要程序和「插件接口庫」。
  • 插件接口庫基本上只包含一個接口或抽象基類,或類似插件可以編碼和擴展的東西。
  • 主程序使用反射或其他標準化接口來提取實現所有插件庫的接口的類的實例。對所有插件重複此步驟
  • 然後在需要與插件進行交互時針對界面進行調用。

設計最後的部分是大部分工作來的地方。什麼是調用或鉤子,或什麼應該被允許?如何註冊,它們只是函數,可能是空的,還是會有某種「掛鉤註冊」?如果後者,這將如何工作(我通常將一個對象傳入構造函數中,可以用來註冊鉤子)?