Re:commit: abi & abiword-plugins: simple plugin interface

From: Kenneth J.Davis (jeremyd@computer.org)
Date: Sat Jul 13 2002 - 14:54:13 EDT

  • Next message: Mark Gilbert: "Commit: table menu fixes"

    As I have been doing something similar (an exported C api), this is an
    interesting approach. Presently I am doing it as a plugin itself, that
    exports a simplistic API. I'm still testing the feasibility
    of my ideas, but presently I have a test plugin AbiCapiTest, all the
    tools plugins that presently work on Windows (AbiPaint, AbiBabelfish,
    AbiURLDict, AbiWikipedia, with Festvox as-is also working though it
    does nothing), along with the graphics imp/exp that presently work
    on Windows (AbiBMP, AbiJPEG, AbiMagick) are supported. My next major
    step in my feasibility testing is to see if I can reasonably support
    the importers/exporters with relative coding ease on the importer/exporter
    side.

    Notes about my approach:
    - Presently I'm only doing this on Windows, though with some minor
    changes (adding appropriate dllload/dllunload/getProcAddress) for
    other platforms then it may also work on them.
    - It involves some duplication, because I am trying to avoid changing
    AbiWord's source (which I did have to add a few ABI_EXPORTS to correct
    linking issues, but this is fixing proper linkage of existing plugins)
    and using any class in AbiWord's source causes an entry in the plugins
    import table for AbiWord.exe [a big no-no for what I'm trying for]
    (Some of this could be avoided by enabling ABI_EXPORT to be defined to
    nothing.) As such, a few really useful things, like UT_String and
    various other tidbits were extracted; this means only what is exposed
    through my plugin (or taken out and slightly modified) is available to
    other plugins that use my approach, though the supported API is easily
    expandable without breaking existing binary compatibility.
    - Plugins are no longer dependant on a given AbiWord build. As a method
    of testing this, all the above plugins in binary form [compiled only
    once] can be used with both AbiWord HEAD branch and AbiWord STABLE
    branch.
    - To ease my life, the plugins all link with their existing but modified
    code and another file abiCapiGeneric.cpp that handles AbiWord's plugin
    interface and handles testing the AbiCapi plugin's exported version
    along with getting the address of all C API functions. The plugin
    DLLs contain no imports for AbiCapi.1.dll nor AbiWord.exe.
    - Mixing of plugins compiled with MS VC 5 or 6 probably works (as that
    worked before), but I presently rely (by my lack of checking and ensuring)
    on using the same C/C++ runtime libary.
    - While they work for me, I don't claim them to be bug free, especially
    for non english languages, after all I'm still just seeing if my
    approach is usable [which I'm still undecided upon, hence my delay
    in mentioning it].

    :-)
    Jeremy Davis
    jeremyd@computer.org

    F J Franklin <F.J.Franklin@sheffield.ac.uk> wrote on 7/13/2002 10:57:24 AM:
    >
    >baby steps...
    >
    >o preliminary/experimental support for a Simple Plugin Interface (SPI): a
    > passive "C"-style interface with support for strict versioning and inter-
    > plugin dependencies; XAP_Spider is the module manager for SPI plugins.
    >
    ..
    >o experimental plugin for testing SPI (Simple Plugin Interface) currently
    > being developed
    >
    ..
    >Regards, Frank
    >
    >Francis James Franklin
    >F.J.Franklin@shef.ac.uk
    >
    >"No, she really likes me. She told me I look like Britney Spears, and why
    >would you say that to somebody you don't like?"
    > --- Elle Woods



    This archive was generated by hypermail 2.1.4 : Sat Jul 13 2002 - 15:14:46 EDT