q0987
q0987

Reputation: 35984

c++ -- how to implement a framework that supports plugins

As we know, Eclipse is a good framework that supports plugins based application development. I am using c++ for coding and would like to learn how to build a framework that support the plugins development. One good example is the Notepad++ that supports plugins. Is there a good book or resource that I can refer to.

Thank you

Upvotes: 5

Views: 387

Answers (3)

PicoCreator
PicoCreator

Reputation: 10154

You can consider just loading shared objects (linux) dynamically, with predefined function hooks...

#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;
}

The above was stolen from dlopen(3) Linux page, but it illustrates an example, where libm.so can be the module, and cos, could be the function name that your hooking to. Obviously this is far from a complete module / plugin framework.... but its a start =)

Upvotes: 0

ManicQin
ManicQin

Reputation: 159

I think that it's kind of an over kill answer (it has good points). Maybe you should first read about interpreters: http://www.vincehuston.org/dp/interpreter.html

You then should decided the boundaries of your plugins and script language, maybe you should start reading about the spirit module in boost.

Upvotes: 3

Kristopher Johnson
Kristopher Johnson

Reputation: 82535

This looks like a pretty good overview of how one could do it: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2015.pdf

Beware that this proposal is for a generic plugin framework for the C++ language. For your particular application, you may not need all the described features.

Upvotes: 4

Related Questions