RE:Embedding CINT (fwd)

Masaharu Goto (MXJ02154@niftyserve.or.jp)
Fri, 29 May 1998 20:16:00 +0900


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