 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Simon Moser Guest
|
Posted: Sun Apr 18, 2004 11:39 am Post subject: String nach function pointer ?? |
|
|
Hallo,
ich habe ein etwas trickreiches Problem: Ich schreibe eine komponente,
welche Plugins laden kann. Diese plugins kommen als DLL zusammen mit
einer XML beschreibung, welche die Signaturen der enthaltenen Methoden
enthält
Bsp:
plugin class name TEST
function void myMethod ()
nun bin ich nach dem einlesen der XML auch in der Lage, das plugin
TEST.dll zu laden und den entryPoint für die Methode myMethod zu
bestimmen. Um die function myMethod aufrufen zu können, dachte ich
(wie ich das früher schon mal gemacht habe) über function pointer
nach.
Bsp.:
typedef void (TEST::*PfnMyMethod)(); [1]
TEST* a1 = (TEST*)_alloca(sizeof(TEST)) [2]
PfnMyMethod* pfnMethod = <cast> procedure_address [3]
a1->*pfnMethod)();
die procedure_address in [3] hole ich mir über den entrypoint, d.h
mittels GetProcAddress (WIN) bzw. dlsym(UNIX).
Problem ist, das ich die typedef declaration in [1] dynamisch
generieren müsste. Und zwar mit input (TEST) oder eben was immer in
der XML definiert ist. Und das krieg ich nicht hin (
Hat irgendjemand eine Idee, wie man das lösen könnte ?!
Grüße
Simon
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Hans Mueller Guest
|
Posted: Mon Apr 19, 2004 9:06 am Post subject: Re: String nach function pointer ?? |
|
|
Simon Moser <Simon.Moser (AT) gmx (DOT) de> wrote:
| Quote: | ich habe ein etwas trickreiches Problem: Ich schreibe eine komponente,
welche Plugins laden kann. Diese plugins kommen als DLL zusammen mit
einer XML beschreibung, welche die Signaturen der enthaltenen Methoden
enthält
|
Die C++ Signatur muß bereits zur Compilezeit Deiner Applikation
bekannt sein - die dynamisch zu generieren geht halt so nicht.
Aber vielleicht reicht es Dir, wenn Du eine Basisklasse für
die Plugin-Funktionen festlegst und die zur Compilezeit nimmst.
Deine Plugins müssen dann eben eine Funktion mit genau den
festgelegte Parametern zur Verfügung stellen. Damit sollte
man meistens auskommen!?
Ansonsten musst Du halt zur Laufzeit alles selber machen (dann
wird's aufwendiger). Vielleicht willst Du einen logischen
Funktionsaufruf (d.h. wie Du ihn in der XML-Datei beschreibst)
auf mehrere Elementare aufteilen, etwa in der Art:
pluginDynCaller.setNumberOfParams( numberOfParams );
pluginDynCaller.setParamType( paramIndex, typeOfParamIdentifier );
pluginDynCaller.stringParam( paramIndex, stringValue );
pluginDynCaller.intParam( paramIndex, intValue );
pluginDynCaller.doFunctionCall();
und die dann in der richtigen Reihenfolge aufrufen.
Gruss, Hans-Achim
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|