From: Kenneth J.Davis (jeremyd@computer.org)
Date: Sat Jul 13 2002 - 14:54:13 EDT
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