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' MyStructure class>>#fieldsDesc ^ #( uint8 id; char * struct_name; uint name_length; ) MyStructure rebuildFieldAccessors . -> DoIt -> MessageNotUnderstood What's i do wrong? I do it in Pharo5 and 6, widows and os x. Sorry for my english, it's not my native language. |
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 <[hidden email]> wrote:
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.
Then separately you evaluated(doIt) the following...
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... cheers -ben
Your english is not too bad :) cheers -ben |
I have recorded screencast abaut this my operations with Pharo. But sometimes I'm moved forvard to operations:https://drive.google.com/open?id=0B_0p5J9SNPlBOHduQlIxdHI0bk0 MyStructure rebuildFieldAccessors. -> DoIt -> Ok myStruct := MyStructure externalNew. -> DoIt -> Ok 2017-04-19 18:46 GMT+04:00 Ben Coman <[hidden email]>:
|
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 <[hidden email]> 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 <[hidden email]>: >> >> 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 <[hidden email]> 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 > > |
Thank Ben. 2017-04-20 12:49 GMT+04:00 Ben Coman <[hidden email]>: Okay that helps a lot. You've done two things wrong. |
Free forum by Nabble | Edit this page |