Re: [ROOT] LoadMacro and unload macro

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sat Apr 05 2003 - 23:26:21 MEST


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