[PD-dev] sending data out using sprintf

nosehair911 at bellsouth.net nosehair911 at bellsouth.net
Fri Jun 22 16:14:02 CEST 2007


Well for never passing pointers around you have some great insight.  That did it. Thanks..
The final outcode for any interested parties:

x->in_frame = (IplImage *)strtol(s->s_name, NULL, 0);

Now I have another snag, but thats in another email.
Alain
> 
> From: Bryan Jurish <moocow at ling.uni-potsdam.de>
> Date: 2007/06/22 Fri AM 05:52:47 EDT
> To: nosehair911 at bellsouth.net
> CC: pd-dev at iem.at
> Subject: Re: [PD-dev] sending data out using sprintf
> 
> moin Alain,
> 
> I've never passed pointers around between externals myself, but...
> 
> On 2007-06-22 04:57:35, <nosehair911 at bellsouth.net> appears to have written:
> > I am trying to send some data out of an outlet using a symbol pointer. I have tried using sprintf like 
> > martin suggested with little succes. I am sure I am the one doing something wrong. I am getting a 
> > pointer symbol but I am not able to convert the pointer back.  In external#1 I have:
> > 
> > The out ----------------
> > IplImage *frame;
> > char symstr[10];
> > t_symbol *sym;
> > sprintf(symstr, "%p", frame);
> > sym = gensym(symstr);
> > outlet_symbol(x->m_outFrames, sym);
> > 
> > With this I get an address like:
> > symbol 0x1159da0
> 
> ... looks kosher to me ...
> 
> > ...but on the conversion in external#2 I get the problem. The conversion looks like:
> > 
> > The in-----------------------
> > IplImage *in_frame;
> > x->in_frame = (IplImage *)atol(s->s_name);
> > post("frame %s", x->in_frame);
> > post("symbol %s",s->s_name);
> >
> > ...with this I get this:
> > frame (null)
> > symbol 0x1159da0
> 
> first of all, you probably want to post("frame %p", x->in_frame), rather
> than "%s".  Second, in the docs for my atol (here under linux|glibc), I see:
> 
>   -- Function: long int atol (const char *STRING)
>      This function is similar to the `strtol' function with a BASE
>      argument of `10', except that it need not detect overflow errors.
>      The `atol' function is provided mostly for compatibility with
>      existing code; using `strtol' is more robust.
> 
> ... so if your atol() is similar, then trying to convert a hex string to
> a pointer with atol() is an exercise in futility (since in general,
> 10!=16).  strtol() ought to work better, auto-detetcting the hex-iness
> of the string by its '0x' prefix.  You might also just want to roll out
> the big guns and use the "%x" format to scanf(), but strtol() is likely
> to be the better way to go.
> 
> marmosets,
> 	Bryan
> 
> -- 
> Bryan Jurish                           "There is *always* one more bug."
> jurish at ling.uni-potsdam.de      -Lubarsky's Law of Cybernetic Entomology
> 





More information about the Pd-dev mailing list