Dies ist möglicherweise der falsche Titel, aber ich weiß nicht, wie es sonst zu beschreiben. Was ich versuche, ist eine C++ Funktion aus meiner Skriptsprache aufzurufen (läuft in einer VM). Ich habe ein paar Probleme damit herausgefunden, wie man Parameter an die Funktion weitergibt.Dynamische C++ Funktion Parameter
Meine beste Lösung so weit ist, dies zu tun:
void func(int a) {
// Start param copy
char c;
char* par_start = &c - sizeof(char) - getCurrentFuncParamOffset();
copyCurrentParams(par_start);
// End copy
// Code
}
Dann wird die Funktion aufzurufen ich es zuerst an die VM aussetzen, die Parameter, um es zu geben. Dies ist ein verkürzter Code, aber alles wird in ein void (*) umgewandelt, so dass es in einer Hash-Tabelle gespeichert werden kann.
EXPOSE greift einen Zeiger auf den Funktionstest und speichert, dass es einen einzelnen in aufgerufen werden muss. Es speichert den Zeiger als void (*)() in einer Hash-Tabelle, so dass, wenn ich es aufrufen möchte, ich einen Anruf von der VM machen kann und es aufgelöst wird. Dann kopiert der Code innerhalb der Funktion (die ich aus einem Makro in der Frage erweitert habe) die Parameter, die vom Aufruf an die VM übergeben wurden, an die Parameter der Funktion.
Dies funktioniert, aber es ist nicht die eleganteste Lösung, vor allem, weil ich ein Makro für jede Funktion aufrufen muss, die ich für das Scripting verfügbar machen möchte. Gibt es eine bessere Lösung? Vielen Dank.
Ihr Teil unter "Dann tue ich" hat keine Verbindung zum obigen Teil. Es ist schwer, wirklich genug zu verstehen, um zu helfen. – AndyG
@AndyG Ich entschuldige mich, hoffentlich die Bearbeitung löscht es – BlueSpud
Nicht ganz. Was ist das Makro "EXPOSE"? Was ist 'cppFunktion'? Was ist der Punkt von "void (* ptr)() = (void (*)());'? – AndyG