offsetof

Heinz Traub malagana15 at yahoo.es
Thu Aug 21 13:27:32 PDT 2008


Steven Schveighoffer Wrote:

> "Heinz Traub" wrote
> > Hi,
> >
> > I've been doing Direct Input code and need to port C to D. I'm trying to 
> > get the offset of a struct member 
> > (http://www.digitalmars.com/d/1.0/ctod.html#fieldoffset) but when i do 
> > this:
> >
> > module dinputd;
> > struct DIMOUSESTATE
> > {
> > long lX;
> > long lY;
> > long lZ;
> > byte rgbButtons[4];
> > }
> >
> > ...
> > module dinputdriver;
> > case DIMOUSESTATE.lX.offsetof:
> >
> > I get the following error:
> >
> > Error: this for lX needs to be type DIMOUSESTATE not type 
> > dinputdriver.Mouse.
> >
> > if i call offsetof in dinputd(the same module where DIMOUSESTATE struct is 
> > declared) i get the following error:
> >
> > dinputd.d(89): Error: no property 'lX' for type 'DIMOUSESTATE'
> >
> > Damn! i'm doing everything as specified by the docs. But i can't get it to 
> > work.
> >
> > Can someone help me please. Thanks in advance.
> 
> This code compiles:
> 
> module dinputd;
> struct DIMOUSESTATE
> {
>     long lX;
>     long lY;
>     long lZ;
>     byte rgbButtons[4];
> }
> 
> int main(char[][] args)
> {
>     switch(args.length) // just to have a non-constant integer
>     {
>     case DIMOUSESTATE.lX.offsetof:
>         break;
>     }
> }
> 
> This does not:
> 
> module dinputd;
> struct DIMOUSESTATE
> {
>     long lX;
>     long lY;
>     long lZ;
>     byte rgbButtons[4];
> }
> 
> class Mouse
> {
>     this(int i)
>     {
>         switch(i)
>         {
>         case DIMOUSESTATE.lX.offsetof:
>             break;
>         }
>     }
> }
> 
> With a similar error as what you said originally.
> 
> I think this is a bug in DMD.  You should file a bug report: 
> http://d.puremagic.com/issues/enter_bug.cgi?product=D
> 
> I can't think of a sensible workaround (besides saving the offsets in a 
> static function, then using those in the member function).
> 
> -Steve 
> 
> 

Thanks 4 your post, i'll report this bug.
I'm using dmd 1.030 for your knowledge.


More information about the Digitalmars-d-learn mailing list