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.yuriy06@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 <btc@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.yuriy06@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
>
>