Torsten, >Hello ROOTers, > >I want to embed the CINT interpreter into an application. This app >needs to evaluate return values of script functions in C++. If I call >the G__calc() function, the return value works for int or double, but >I could not interprete the value for structures or objects. > >Any help? > >Regards, It depends whther you use G__calc() from the interpreter or in a precompiled code. Using G__calc() in the interpreter, it will properly return struct or class object. For example, if you interpret following code, a2 is correctly a copy of a1. class A { public: int a; double d; } main() { A a1,a2; a1.a=123; a1.d=3.14; a2=G__calc("a1"); } Using G__calc() in a precompiled code make a little difference. G__calc() returns an object of G__value which is defined in $CINTSYSDIR/G__ci.h. You can use G__int() and G__double() to converto G__value to long or double. In case of struct and class object, you will get pointer to the returned object as follows. A *p; p=(A*)G__int(G__calc("a1")); Note that a1 must be registered in the interpreter's dictionary. To test type of "a1", you can use G__ClassInfo class. #include "G__ci.h" // need -I$CINTSYSDIR #include "src/Api.h" f() { A *p; G__value v=G__calc("a1"); G__ClassInfo cls(v.tagnum); if(strcmp(cls.Name(),"A")==0) p=(A*)G__int(v); else p=(A*)NULL; // a1 is not type of A } Masaharu Goto
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:33 MET