[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [ns] HOW TO ACCESS C++ VARIABLE USING TCL (fwd)
this is exactly what i am doing.
i need to access the class variable "tapbytes_" from .tcl.
so i have done following modifications to the
TapAgentClass:
static class TapAgentClass : public TclClass {
protected:
// MY MODIFICATION
virtual void bind();
virtual int method(int argc, const char*const* argv);
static int tapbytes_;
public:
// MY MODIFICATION
void recordbytes(Packet* );
TapAgentClass() : TclClass("Agent/Tap"),tapbytes_(0) {}
TclObject* create(int, const char*const*) {
return (new TapAgent());
}
then i go on to define recordbytes();
and i define bind() and method() as follows:
void TapAgentClass::bind()
{
// Call to base class bind() must precede add_method()
TclClass::bind();
add_method("tapbytes");
}
int TapAgentClass::method(int ac, const char*const* av)
{
Tcl& tcl = Tcl::instance();
// Notice this argument translation; we can then handle them
//as if in TclObject::command()
int argc = ac - 2;
const char*const* argv = av + 2;
if (argc == 2) {
if (strcmp(argv[1], "tapbytes") == 0) {
tcl.resultf("%d", tapbytes_);
return (TCL_OK);
}
} else if (argc == 3) {
if (strcmp(argv[1], "tapbytes") == 0) {
tapbytes_ = atoi(argv[2]);
return (TCL_OK);
}
}
return TclClass::method(ac, av);
}
are there any obvious problems with this code? i get the error:
Undefined Symbol "TapAgentClass::tapbytes_" referenced from text.
now if i define tapbytes_ to be global. then it compiles but while running
in the .tcl script i CAN"T do the following:
set agent2 [new Agent/Tap]
$agent2 tapbytes
could someone be kind enough to look into this long code. i would really
appreciate it.
Shailesh Sheoran
M.ASc.
Department of Electrical Engineering
University of British Columbia
---------- Forwarded message ----------
Date: Mon, 15 Jan 2001 13:59:12 -0800
From: Scott Michel <[email protected]>
To: shailesh sheoran <[email protected]>
Subject: Re: [ns] HOW TO ACCESS C++ VARIABLE USING TCL
On Sun, Jan 14, 2001 at 10:16:52PM -0800, shailesh sheoran wrote:
> hi,
> i needed to define a variable in tap.cc and access it from my .tcl
> script. i couldnot quite decipher the information from the manual. would
> someone please tell me how to do it.
> i would really appreciate it.
> thanks,
> Shailesh Sheoran
> M.ASc.
> Department of Electrical Engineering
> University of British Columbia
G'day, eh?!
All seriousness aside, is the C++ variable a class variable or an
instance variable?
- For class variables (i.e. "static" in the class declaration), you
want to call bind(...).
- For instance variables (i.e. variables in each instance), you want
to look at examples that use "delay_bind(...)", which abound in the
code. Have a look at agent.cc, as one example.
HTH
-scooter