Hi Valeri, Yes, this is possible. see your files slightly modified below: Run the script creating the shared lib test.so, then run the session: Root > gSystem->Load("test"); Root > Bclass b; Root > b.Dump(); Rene Brun //----script to create a small shared lib on Linux rootcint -f testcint.cxx -c test.h LinkDef.h g++ -g -fPIC -I$ROOTSYS/include -c testcint.cxx test.cxx g++ -g -Wl,-soname,test.so -shared testcint.o test.o -o test.so //----LinkDef.h file #ifdef __CINT__ #pragma link off all globals; #pragma link off all classes; #pragma link off all functions; #pragma link C++ class Bclass; #endif //-----test.h #include "TObject.h" class Aclass { private: int a_member; public: Aclass(){} virtual ~Aclass(){} // ClassDef(Aclass,1) // if this line commented - a_member is hidden from root }; class Bclass :public TObject ,public Aclass { private: int b_member; public: Bclass(); virtual ~Bclass(){} ClassDef(Bclass,1) }; //-------test.cxx file #include "test.h" ClassImp(Bclass) Bclass::Bclass() :Aclass() { b_member = 1234; } On Wed, 9 Feb 2000, Valeri Tioukov wrote: > Hi Rooters, > > If I have class Aclass used by external application and I do not want to > do ANY changement in this class, but I'd like to make it's memebers and > functions visible to Root system (for storage and analisys purpose) > inheriting new Bclass as following: > > class Bclass > :public TObject > ,public Aclass > > Is it possible? > > I investigate that without including macros ClassDef(Aclass,1) into the > body of Aclass rootcint do not generate Streamer() and > ShowMembers() functions. Just mentioning of Aclass in LinkDef.h do not > helps. > > So it seems that the answer is NOT: it is not possible to make the members > of classA visible to Root without changements of classA body. > > But the same question was asqued at least twice: > > http://root.cern.ch/root/roottalk/roottalk98/1986.html > http://root.cern.ch/root/roottalk/roottalk98/0107.html > > and in both cases the answers were a bit confusing but positive. > > Why do not find the definite answer and add it to FAQ? > > I used for tests: > ----------------test.h------------ > #include "TObject.h" > > class Aclass > { > private: > int a_member; > > public: > Aclass(){} > virtual ~Aclass(){} > > // ClassDef(Aclass,1) // if this line commented - a_member is hidden from root > }; > > class Bclass > :public TObject > ,public Aclass > { > private: > int b_member; > > public: > Bclass():Aclass(){} > virtual ~Bclass(){} > > ClassDef(Bclass,1) > }; > ----------------------------------- > > ---------LinkDef.h---------------------- > #ifdef __CINT__ > > #pragma link off all globals; > #pragma link off all classes; > #pragma link off all functions; > > #pragma link C++ class Aclass; > #pragma link C++ class Bclass; > > #endif > --------------------------------------- > > > Without the commented line command > > > rootcint -f test_h.C -c test.h LinkDef.h > > do not care about members of Aclass. > > > Best regards > Valeri >
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:18 MET