RE:Embedding CINT (fwd)

From: Masaharu Goto (MXJ02154@niftyserve.or.jp)
Date: Fri May 29 1998 - 13:16:00 MEST


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