c ++ - 如何实现支持插件的框架

时间:2011-02-27 03:48:55

标签: c++

众所周知,Eclipse是一个支持基于插件的应用程序开发的好框架。我正在使用c ++进行编码,并希望学习如何构建支持插件开发的框架。一个很好的例子是支持插件的Notepad ++。是否有一本好书或资源我可以参考。

谢谢

3 个答案:

答案 0 :(得分:4)

这看起来非常好地概述了如何做到这一点:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2015.pdf

请注意,此提议适用于C ++语言的通用插件框架。对于您的特定应用程序,您可能不需要所有描述的功能。

答案 1 :(得分:3)

我认为这是一种过度杀人的答案(它有好处)。也许你应该首先阅读口译员: http://www.vincehuston.org/dp/interpreter.html

然后你应该决定你的插件和脚本语言的界限,也许你应该开始阅读boost中的spirit模块。

答案 2 :(得分:0)

您可以考虑使用预定义的函数挂钩动态加载共享对象(linux)...

#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
    void *handle;
    double (*cosine)(double);
    char *error;
    handle = dlopen ("libm.so", RTLD_LAZY);
    if (!handle) {
        fprintf (stderr, "%s\n", dlerror());
        exit(1);
    }
    dlerror();    /* Clear any existing error */
    cosine = dlsym(handle, "cos");
    if ((error = dlerror()) != NULL)  {
        fprintf (stderr, "%s\n", error);
        exit(1);
    }
    printf ("%f\n", (*cosine)(2.0));
    dlclose(handle);
    return 0;
}

以上内容是从dlopen(3) Linux page中窃取的,但它说明了一个示例,其中libm.so可以是模块,而cos可能是您挂钩的函数名称。显然这远不是​​一个完整的模块/插件框架....但它的开始=)