Hello everybody,
in the example hserv2.C (in the tutorials directory), the program reads
objects from a network connection via the type TMessage:
...
TMessage mess
...
s->Recv(mess);
...
if (mess->What() == kMESS_OBJECT)
{
printf("got object of class: %s\n", mess->GetClass()->GetName());
TH1 *h = (TH1 *)mess->ReadObject(mess->GetClass());
...
This works fine as long as the message contains only objects of one class.
However, I would like to put several objects of different classes in one
message. As I understand, this is supported since version 2.00/06 (see the
message by Judith Katzy from May 18 1998).
If I just add another statement
TH1 *h = (TH1 *)mess->ReadObject(mess->GetClass());
MyClass *m = (MyClass *)mess->ReadObject(mess->GetClass());
the second line produces the error message
Error in <TMessage::ReadClass>: got wrong class
The two objects are however extracted correctly from the message, as long
as I extract them in the same order as they were put in.
Looking at the source code for TMessage::GetClass() (in TMessage.h), one
sees that GetClass() returns the private variable fClass, which contains a
pointer to the class of the first object put into the message. Thus the
error message is what one would expect: in the second call, ReadObject
would like to have a pointer to MyClass, not to TH1.
Now my question is: is there any way to get a pointer to the next class
that will be extracted of a TMessage?
I am using ROOT 2.24/02 on SunOS 5.7.
Thanks for your help,
Rasmus.
___
http://www.desy.de/~rasmus
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:24 MET