Thank Ben.

2017-04-20 12:49 GMT+04:00 Ben Coman <b...@openinworld.com>:

> Okay that helps a lot.  You've done two things wrong.
>
> 1. You actually did....
>         ExternalStructure subclass: #MyStructure
> not
>        FFIExternalStructure subclass: #MyStructure
>
> This is what caused the error, since if you compare
> the class-side methods (by clicking the <Class> button)
> of ExternalStructure and FFIExternalStructure
> you'll see only the latter has method #rebuildFieldAccessors.
>
>
> 2. You didn't click the <Class> button before adding method #fieldsDesc.
> This would trip you up after you fix the above.
> "MyStructure rebuildFieldAccessors" would no longer produce an error
> but *nothing* would happen when you evaluate it.
> When you add #fieldsDesc to the class-side, switch back to the
> instance-side
> to observe what happens when you evaluate "MyStructure
> rebuildFieldAccessors".
>
> You'll know you are looking at the class-side when you see the class's
> class-side definition
>      MyStructure class
>          instanceVariableNames: ''
>
> rather than the class's instance-side definition...
>     FFIExternalStructure subclass: #MyStructure
>         instanceVariableNames: ''
>         classVariableNames: ''
>         package: 'FFIDemo'
>
> Pay attention that the documentation says
>     MyStructure class>>#fieldsDesc
> rather than
>     MyStructure>>#fieldsDesc
>
> The former is a method on the class-side
> and the latter is   a method on the instance-side.
>
> A weak analogy is that you can think of class-side methods
> as the methods of MyStructure factory that produces the the Mystructure
> objects.
>
> Actually I can see how "MyStructure class>>#fieldsDesc" can be
> ambiguous to newcomers.
> Your mind has not yet been conditioned to catch on that detail and and
> glosses over it unconsciously thinking "yes, I know MyStructure is a
> class. I'm adding a method to it".
> This is something that often catches newcomers.  I remember getting
> caught on it myself.
>
> Makes me wonder if documentation instead using   "MyStructure
> classside>>#fieldsDesc"
> is more intention revealing, and making the browser button match this
> as  <Class Side>
> would make working with instance/class-side more obvious to newcomers.
>
> cheers -ben
>
> On Thu, Apr 20, 2017 at 1:52 PM, Yuriy Babah <babah.yuri...@gmail.com>
> wrote:
> >
> > I have recorded screencast abaut this my operations with Pharo.
> >
> > https://drive.google.com/open?id=0B_0p5J9SNPlBOHduQlIxdHI0bk0
> >
> > But sometimes I'm moved forvard to operations:
> >
> > MyStructure rebuildFieldAccessors. -> DoIt -> Ok
> >
> > myStruct := MyStructure externalNew. -> DoIt -> Ok
> >
> > myStruct := id: 42. -> MessageDoesUnderstood.
> >
> > I'm doesn't understand in which cases i got to this moment.
> >
> > I'm associete that with that what i have a several copy's Pharo.
> > And somebody affect to other.
> >
> > 2017-04-19 18:46 GMT+04:00 Ben Coman <b...@openinworld.com>:
> >>
> >> Hi Yuriy,
> >>
> >> Hope I can help.  I tried your example in build 60463 and its works
> fine.  So lets break it down.
> >>
> >> On Wed, Apr 19, 2017 at 8:46 PM, Yuriy Babah <babah.yuri...@gmail.com>
> wrote:
> >>>
> >>> Hello everyone,
> >>>
> >>> I'm new to Pharo and have tried do example with structure in Unified
> FFI manual.
> >>>
> >>> FFIExternalStructure subclass: #MyStructure
> >>> instanceVariableNames: ''
> >>> classVariableNames: ''
> >>> package: 'FFIDemo'
> >>
> >>
> >> You opened a System Browser and entered and accepted the above first on
> its own,
> >> such that the new package & class were added and the new class selected.
> >>
> >> Then you clicked on the <Class> button, such that the "no messages"
> text in the third pane changed from
> >> normal font to bold font.  Then clicked on "no messages" to display the
> method template....
> >>     messageSelectorAndArgumentNames
> >> "comment stating purpose of message"
> >>   | temporary variable names |
> >>   statements
> >>
> >> And replaced that text with the text below from "fieldsDesc" onwards,
> >> the Accepted that.
> >>
> >>>
> >>> MyStructure class>>#fieldsDesc
> >>> ^ #(
> >>> uint8 id;
> >>> char * struct_name;
> >>> uint name_length;
> >>> )
> >>>
> >>
> >> Then separately you evaluated(doIt) the following...
> >>
> >>>
> >>> MyStructure rebuildFieldAccessors
> >>
> >>
> >>
> >>>
> >>> . -> DoIt -> MessageNotUnderstood
> >>>
> >>> What's i do wrong?
> >>
> >>
> >> Does a debug window appear?  What is the exact text of the title bar,
> >> which details which message is not understood by which class.
> >> This provides an important hint to what is wrong.
> >>
> >> Further help might need a live chat. I'll be in discord for a couple of
> hours, but ask anyone there...
> >> https://discord.gg/KCKQSSt
> >>
> >>  cheers -ben
> >>
> >>> I do it in
> >>> Pharo5 and 6, widows and os x.
> >>> Sorry for my english, it's not my native language.
> >>>
> >>
> >> Your english is not too bad :)
> >>
> >> cheers -ben
> >
> >
>
>

Reply via email to