hi - find below one of the possible implementations. Note that direct calling of an interpreted function from a compiled one in general may not be possible - in this case a compiler may need to know about the internals of the intepreter... - best, pasha -------------------------------------- MyClass.h #include <TObject.h> #include <TInterpreter.h> class TMyClass { public: static Float_t fgRetVal; private: char fName[100]; public: void SetFunction(char* f) { strcpy(fName,f); } Float_t Function() { char command[100]; sprintf(command,"%s();",fName); gInterpreter->ProcessLine(command); return fgRetVal; } }; ------------------------------- TMyClass.C #include "TMyClass.h" Float_t TMyClass::fgRetVal; --------------------------- MyFunc.C #include "TMyClass.h" void MyFunc() { printf("the answer is ...\n"); TMyClass::fgRetVal = 42.; } ------------------------------------------------------------ end of sources now you start ROOT and load TMyClass in compiled mode and MyFunc - in interpeted mode: root [0] .L TMyClass.C+ Creating shared library /home/murat/./TMyClass.so Note: operator new() masked 1c Note: operator delete() masked 1c Class TMyClass: Streamer() not declared Class TMyClass: ShowMembers() not declared root [1] .L MyFunc.C root [2] TMyClass x; root [3] x.SetFunction(MyFunc); root [4] x.Function() the answer is ... (Float_t)4.20000000000000000e+01 root [5] -------------------------------------------------------------------------------------- Anton Fokin wrote: > > Hello! > > I am in troubles with calling interpreter function from compiled code. > > Let's say I have compiled class > > class TMyClass { > private: > Float_t (*fFunc) (); > public: > void SetFunction(const char* Macro); > Float_t Function() { return (*fFunc)() } > }; > > and a macro in Macro.C file > > Float_t > MyFunc() > { > printf("the answer is ...\n"); > return 42; > } > > now I would like to write in my compiled program: > > TMyClass *MyClass = new TMyClass(); > MyClass->SetFunction("Macro.C"); > Float_t Answer = MyClass->Function(); > > How TMyClass::SetFunction(const char* Macro) should look like? I am sure you > suggest me to look into TF1 implementation, but could you write a few lines > of example code instead? I hope it helps others too ... > > Best regards, > Anton
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:20 MET