Hi Caius, For your point 1; you must create a TApplication to use LoadMacro. For your point 2, use gSystem->Unload. See your modified main program below. Rene Brun #include "TROOT.h" #include "TSystem.h" #include "TApplication.h" #include <iostream> using namespace std; int main(void) { TApplication app("app",0,0); cout << "loadmacro"<<endl; int error = 0; //gROOT->ProcessLine(".L MyTest.C++", &error); gROOT->LoadMacro("MyTest.C++"); if(error!=0){ cout <<"failed"<<endl; return 0; } cout << "start"<<endl; gROOT->ProcessLine("my_start();"); cout << "iter"<<endl; for(int i=0; i<10; i++) gROOT->ProcessLine("my_tick();"); gSystem->Unload("MyTest_C.so"); gROOT->LoadMacro("MyTest2.C++"); gROOT->Reset(); gROOT->ProcessLine("my_tick();"); return 1; } On Sat, 5 Apr 2003, Caius Howcroft wrote: > > > Hi, > > I am trying to call a script from inside a compiled main (see below). I > have two questions. > > 1) calling LoadMacro rather than ProcerssLine(".L MyTest.C") doesnt seem > to work, I get errors like: > > Error: Function my_start() is not defined in current scope > FILE:/tmp/CZEfNi_cint LINE:1 > Possible candidates are... > filename line:size busy function type and name > *** Interpreter error recovered *** > > > Why is this? > > 2) I would like to call different scripts with the same functions. So I > need to "Unload" a macro so I can do something like: > > gROOT->LoadMacro("script1.C+"); > gROOT->ProcessLine("my_start()"); > gROOT->UnloadMacro("script1.C") > gROOT->LoadMacro("script2.C+") > gROOT->ProcessLine("my_start()"); > gROOT->UnloadMacro("script1.C") > > > How can I do this? > > Caius > > > > //========main > #include "TROOT.h" > #include <iostream> > using namespace std; > > int main(void) > { > cout << "loadmacro"<<endl; > int error = 0; > gROOT->ProcessLine(".L MyTest.C++", &error); > if(error!=0){ > cout <<"failed"<<endl; > return 0; > } > > cout << "start"<<endl; > gROOT->ProcessLine("my_start();"); > > cout << "iter"<<endl; > for(int i=0; i<10; i++) > gROOT->ProcessLine("my_tick();"); > > gROOT->Reset(); > gROOT->ProcessLine("my_tick();"); > > return 1; > } > //==script > #include <iostream> > int myi = 0; > using namespace std; > void my_start() > { > cout <<"start"<<endl; > return; > } > > void my_tick() > { > cout <<"tick:"<<myi<<endl; > ++myi; > return; > } > > > > ________________________________________ > - CAIUS HOWCROFT - > - +44 (0)1223 764 128 UK(office) - > ======================================== >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:10 MET