繁体   English   中英

用C ++编写的用于文本编辑器的插件系统

[英]Plugin system for text editor writen in C++

我正在用C ++创建一个跨平台的文本编辑器。 我想有一个非常基础的基础,然后通过插件实现所有功能。 但是,不幸的是,我在设计插件系统方面无济于事。 通常如何做? 有人可以指出我正确的方向吗?

不知道这是否重要,但是我正在使用wxWidgets小部件套件。

您可以从定义一个特定插件接口的基类开始,即:TextTransformPlugin,该方法带有一个字符串并返回一个字符串(虚拟)。

每个插件都将从该接口继承,您可以构建此类,例如:动态库(.so文件)中的SpanishTranslateTransformPlugin。

使用dlopen在程序中打开库(有关C ++示例,请参见此处 )。 由于无法调用类构造函数,因此在so库中定义了一个标准函数(所有插件的名称相同,可以说create()并为其指定C调用约定,以便随后可以使用dlsym获取符号并进行强制转换它返回一个返回TextTransformPlugin的函数并调用它。

extern "C" {
    TextTransformPlugin * create(); // this would return new SpanishTranslateTransformPlugin
}

这样,您将获得一个TextTransformPlugin对象,即插件。 由于接口方法是虚拟的,因此将调用具体方法。

您将必须照顾插件的生命周期,并将其保存在注册表中。 知道何时使用它们,最后销毁它们并关闭库。

请注意,Windows在您找到dlopen的地方没有dlfcn.h。 LoadLibrary API中有类似的功能,但是您需要自己抽象平台。

如果您使用像Qt这样的多平台框架,则可以免费获得很多样板,并且可以在支持的平台上运行。 这是可插拔油漆应用程序的示例:

http://doc.qt.nokia.com/latest/tools-plugandpaint.html

如您所提到的,您正在使用wxWidgets,这应该是照顾多个平台的等效功能:

http://docs.wxwidgets.org/2.8/wx_wxdynamiclibrary.html和完整示例: http : //wiki.wxwidgets.org/Programs_That_Support_Plugins

是您可以在互联网上找到的最佳线索

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM