Funktionen abspeichern (Vorsicht, freakig)
-
Hi!
k.A. ob das jetzt mehr C, C++ oder Asm ist. Poste das einfach mal hier.
Ich wollte ursprünglich meine Script-Engine aufmotzen bis ich auf
die Idee gekommen bin C/C++-Source zur Laufzeit in mein Programm
einzufügen. Ursprünglich habe ich das mit dem TCC (Tiny C Compiler)
gemacht der extra solche Optionen bietet. Damit ließe sich das Schreiben
von Functions-Files noch wesentlich vereinfachen.Hier ist das Exporter-Proggie:
#include <iostream> #include <fstream> #include <string> using namespace std; typedef unsigned char uchar; typedef unsigned int uint; typedef const string cstring; float power(float a) { float b = a*a; return b; } void WriteFunction(cstring& filename, void* ptr) { ofstream out(filename.c_str(),ios::binary); uint size = 1; for(uchar* p=(uchar*)ptr; (*p) != 0xC3; ++p) size++; out.write((char*)ptr,size); } int main(void) { WriteFunction("power.bin",(void*)&power); return 0; }
Die Funktion kann jetzt von einem anderen Programm importiert und genutzt werden:
#include <iostream> #include <fstream> using namespace std; typedef float (*FUNC)(float); typedef unsigned char uchar; int main(void) { ifstream in("power.bin",ios::binary); in.seekg(0,ios::end); uint size = in.tellg(); in.seekg(0,ios::beg); uchar* exec = new uchar[size]; in.read((char*)exec,size); FUNC callme = (FUNC)exec; cout << callme(32.0f) << endl; delete[] exec; return 0; }
Funzt unter Linux (ja, der Kernel ist stable ;)) ohne Probleme.
Einzig das benutzen von Funktionen/Variablen des Importer-Programms
die nicht der importierten Funktion als Parameter übergeben werden macht mir Probleme. Vorschläge?Ach ja und ich weiß das es dlls und so -Files gibt