I had a #asString method in the BYTE_8 class that I put by accident in the
*generated-code... protocol
This method will be removed if the generated methods are regenerated.
Just add a new method:
BYTE_8>>asString

    ^ self address hex

The address has 8 bytes because this is the max number of bytes reserved
for the address.
The IP_ADAPTER_INFO struct has a field for the actually used number of
bytes.
You can read that field and just read this number of bytes.



2015-05-12 21:32 GMT+02:00 Usman Bhatti <usman.bha...@gmail.com>:

> Hi Nicolas,
>
> Thank you for looking at the code.
> I was away and could not try your code.
>
> On Thu, May 7, 2015 at 9:27 AM, p...@highoctane.be <p...@highoctane.be>
> wrote:
>
>>
>>
>> On Thu, May 7, 2015 at 1:06 AM, Nicolai Hess <nicolaih...@web.de> wrote:
>>
>>>
>>>
>>> 2015-05-06 22:47 GMT+02:00 Henrik Sperre Johansen <
>>> henrik.s.johan...@veloxit.no>:
>>>
>>>> A few easily fixed Type/pointers to Types mixups, and a slipup where
>>>> two different classes are confused for the same aside, the real show
>>>> stopper, if I haven't missed something entirely, is that the struct
>>>> parser/NB in general does not handle const sized arrays*, which is used in
>>>> a few of the required structs.
>>>>
>>>> Extending the parser should be relatively straight forward, along the
>>>> lines of adding
>>>> stream peek: #'[' ifTrue: [stream next.
>>>>    type := SizedExternalArrayType type: type size: stream next.
>>>>    stream next = #']' ifFalse: [self error: 'Missing closing bracket
>>>> for ', type printString]]
>>>> to NBExtenralStructureFields >> #parseFields:... after the name is read.
>>>>
>>>> Coding SizedExternalArrayType is a bit more work though...
>>>>
>>>> Cheers,
>>>> Henry
>>>>
>>>>
>>>> *The end goal would be to be able to generate accessors/read/write for
>>>> a simple test-struct such as
>>>> #fieldsDesc
>>>> ^#(
>>>>       char   ip[MyClassVar +2];
>>>> )
>>>>
>>>
>>> Yes, a parser for this would be great.
>>>
>>> I tried it with a little hack
>>>
>>> NBExternalStructure subclass: #Char_260 ...
>>>
>>> Char_260 class>>#fieldDesc
>>> ^ #(char data)
>>>
>>> Char_260 class>>instanceSize
>>> ^ 260
>>>
>>> You need another accessor for accessing the data, otherwise you'll only
>>> get the first char. AND I don't know how
>>> the external memory is handle, probably it is never freed :)
>>>
>>> Now a complete example (attached code) call it with
>>> GetMacWin32 getMacAddress
>>>
>>
>>
>> Code loads fine on my 3.0
>>
>
> same here.
>
>
>>
>> But hiccup on:
>>
>
>> resolveType: aTypeName
>> " a type name could be
>>  - a class variable name
>> - a class name
>> - a type name
>> - a type name, followed by arbitrary number pointer chars - $*"
>>
>> | name newName resolver binding ptrArity |
>>  newName := aTypeName.
>> ptrArity := 0.
>> "resolve aliases and pointers"
>> [
>> name := newName trimRight.     <<<--------------- HERE - as newName is a
>> subclass of NBExternalStructure, so no trimRight
>> newName := self aliasForType: name.
>> newName last = $* ifTrue: [
>> ptrArity := ptrArity + 1.
>> newName := newName allButLast ].
>> name = newName ] whileFalse.
>>
>> I changed to name := newName asString trimRight.
>>
>
> this worked for me.
>
>
>>
>> Call worked then but output gives this:
>>
>> GetMacWin32 getMacAddress 'BYTE_8 (
>> data: $¼  <-- some weird string here
>> )'
>>
>
> It worked for me, I didn't encounter the problem of strange characters.
> I get:
> 000c29ab70960000
> The last 4 trailing zeros are not the part of the mac address and I am not
> sure why these are getting added. I'll have a look at your code.
>
> thanks again.
>
> usman
>
>
>> Also, I wonder why you call the primGet... twice
>>
>> getMacAddressOf: iInterface
>> | ptr ptr2 nul ret |
>> ptr := NativeBoost allocate: 4.
>> nul := NativeBoost allocate: 0.
>> ptr nbUInt32AtOffset: 0 put: 0.
>> ret := self primGetAdaptersInfo: nul length: ptr.
>> ret = 111 "ERROR_BUFFER_OVERFLOW"
>> ifTrue: [
>> | size |
>> size := ptr nbUInt32AtOffset: 0.
>> ptr2 := NativeBoost allocate: size.
>> ret := self primGetAdaptersInfo: ptr2 length: ptr.
>> ret = 0 "NO_ERROR"
>> ifTrue: [
>> | pip numberOfInterfaces|
>>    numberOfInterfaces := size / IpAdapterInfo instanceSize.
>>    (iInterface between:1 and: numberOfInterfaces)  ifFalse:[ ^ nil].
>> pip := (NBExternalArray ofType: IpAdapterInfo) onAddress: ptr2 size:
>> numberOfInterfaces.
>> ^ (pip at:iInterface ) Address asString]].
>> ^ nil
>>
>> Phil
>>
>>
>>
>>
>>
>>>
>>>
>>>>
>>>> On Wed, May 6, 2015 at 5:28 PM, Esteban Lorenzano <esteba...@gmail.com>
>>>> wrote:
>>>>
>>>>>
>>>>> On 06 May 2015, at 17:03, Nicolai Hess <nicolaih...@web.de> wrote:
>>>>>
>>>>>
>>>>>
>>>>> 2015-05-06 16:40 GMT+02:00 Esteban Lorenzano <esteba...@gmail.com>:
>>>>>
>>>>>>
>>>>>> On 06 May 2015, at 12:10, p...@highoctane.be wrote:
>>>>>>
>>>>>> I've loaded your package.
>>>>>>
>>>>>> A prerequisite is to load OS-Window to make it work.
>>>>>>
>>>>>>
>>>>>> why?
>>>>>> in any case, oswindow is already included in pharo4
>>>>>>
>>>>>
>>>>> OS-Windows (by TorstenBergmann)
>>>>>
>>>>> not
>>>>> OSWindow  :)
>>>>>
>>>>>
>>>>> ahhh. Name clash :)
>>>>>
>>>>>
>>>>> It is needed for the shared pool WinTypes,
>>>>> but without OS-Window, he can use NBWinTypes instead.
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> Esteban
>>>>>>
>>>>>>
>>>>>> I've got the DLL call working nicely and the nativeboost with the
>>>>>> structure freezing.
>>>>>>
>>>>>> Now, we should all have a look at:
>>>>>>
>>>>>> https://github.com/ronsaldo/bullet-pharo
>>>>>>
>>>>>> and
>>>>>>
>>>>>> https://github.com/ronsaldo/swig
>>>>>>
>>>>>> because it looks like the way to go to wrap libraries...
>>>>>>
>>>>>> Ronie, I know you modified swig for generating Pharo code;
>>>>>>
>>>>>> Is cloning your swig repo the way to go ?
>>>>>>
>>>>>>
>>>>>> Phil
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, May 6, 2015 at 10:39 AM, Usman Bhatti <usman.bha...@gmail.com
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi Nicolai,
>>>>>>>
>>>>>>> Here is my package that defines the nativeboost call and associated
>>>>>>> C structs.
>>>>>>> The external C struct is self referencing and hence sometimes I get
>>>>>>> infinite recursion when trying to change field descriptions. That is the
>>>>>>> reason why the automatically generated accessors are absent (although I 
>>>>>>> had
>>>>>>> them in an earlier version).
>>>>>>>
>>>>>>> Attached also the DLL referenced in the code.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wed, May 6, 2015 at 9:58 AM, Nicolai Hess <nicolaih...@web.de>
>>>>>>> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> 2015-05-06 9:53 GMT+02:00 Usman Bhatti <usman.bha...@gmail.com>:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, May 5, 2015 at 7:34 PM, p...@highoctane.be <
>>>>>>>>> p...@highoctane.be> wrote:
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <
>>>>>>>>>> usman.bha...@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> I succeeded to do it by encapsulating the C routine as a DLL and
>>>>>>>>>>> doing an FFI call from my image (as suggested by Guille).
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> At least there was a way!
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Exactly :)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Looks like this is the most controlled|debuggable way:
>>>>>>>>>>   - get it working with C code out of Pharo
>>>>>>>>>>   - make a bridge that can be used easily with FFI in a dll
>>>>>>>>>>   - use that from Pharo with proven FFI
>>>>>>>>>>
>>>>>>>>>> Would NativeBoost work with your dll? Should.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I have read a few resources about Nativeboost but I am still naive
>>>>>>>>> to know the difference between FFI and nativeboost. The FFI call I 
>>>>>>>>> made to
>>>>>>>>> invoke the DLL function looked similar to the nativeboost calls.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I also tried to perform the nativeboost call by creating my
>>>>>>>>>>> structures in Pharo. The function in Windows that can be used to 
>>>>>>>>>>> retrieve
>>>>>>>>>>> mac address in Windows: GetAdaptersInfo
>>>>>>>>>>> <https://msdn.microsoft.com/en-us/library/windows/desktop/aa365917%28v=vs.85%29.aspx>
>>>>>>>>>>>  that
>>>>>>>>>>> accepts a PIP_ADAPTER_INFO
>>>>>>>>>>> <https://msdn.microsoft.com/en-us/library/windows/desktop/aa366062(v=vs.85).aspx>
>>>>>>>>>>>  structure.
>>>>>>>>>>> I subclassed NBExternalStructure to define this struct and the 
>>>>>>>>>>> other used
>>>>>>>>>>> by it in the image but my NB call returned with 87 code (Invalid 
>>>>>>>>>>> parameter)
>>>>>>>>>>> and it was impossible to debug. However, I would like to make this 
>>>>>>>>>>> thing
>>>>>>>>>>> work to understand what went wrong.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Has this something to do with 32|64 bit library complications?
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Not exactly. For me, it was more related to the fact that I had to
>>>>>>>>> map a complex C struct in Pharo. Here is an excerpt of the definition 
>>>>>>>>> from
>>>>>>>>> MSDN:
>>>>>>>>>
>>>>>>>>> typedef struct _IP_ADAPTER_INFO {
>>>>>>>>>   struct _IP_ADAPTER_INFO  *Next;
>>>>>>>>>  ...
>>>>>>>>>   PIP_ADDR_STRING         CurrentIpAddress;
>>>>>>>>>           IP_ADDR_STRING          GatewayList;
>>>>>>>>> ...
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> So, I had to define three external structures (all names in
>>>>>>>>> capitals) and I did the effort but in the end I got an error code 
>>>>>>>>> that I
>>>>>>>>> could not debug in the image. Hence, I gave up and opted to go in the
>>>>>>>>> native environment. But I would like someone knowledgable to have a 
>>>>>>>>> look at
>>>>>>>>> my nativeboost code  because the nativeboost approach is more simple
>>>>>>>>> (everything's in the image).
>>>>>>>>>
>>>>>>>>
>>>>>>>> I can have a look.
>>>>>>>>
>>>>>>>> btw. for what do you need the mac address?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> usman
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Phil
>>>>>>>>>>
>>>>>>>>>> With ProcessWrapper, I could not load the classes essential for
>>>>>>>>>> making the plugin work.
>>>>>>>>>>
>>>>>>>>>> HTH,
>>>>>>>>>>
>>>>>>>>>> Usman
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Mon, May 4, 2015 at 2:54 PM, Ben Coman <b...@openinworld.com>
>>>>>>>>>> wrote:
>>>>>>>>>> As a complete newb to VM building I found this fairly straight
>>>>>>>>>> forward (on a Mac btw).
>>>>>>>>>> https://github.com/pharo-project/pharo-vm
>>>>>>>>>> cheers -ben
>>>>>>>>>>
>>>>>>>>>> On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <
>>>>>>>>>> usman.bha...@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <pie...@samadhiweb.com>
>>>>>>>>>> wrote:
>>>>>>>>>> On Sat, May 02, 2015 at 03:55:47PM +0200, Usman Bhatti wrote:
>>>>>>>>>> > 1/ OSProcess: I tried  (PipeableOSProcess command: 'ipconfig
>>>>>>>>>> /all') output.
>>>>>>>>>>
>>>>>>>>>> I have used http://www.smalltalkhub.com/#!/~hernan/ProcessWrapper
>>>>>>>>>> successfully
>>>>>>>>>> back when I was on Windows using some now-ancient version of
>>>>>>>>>> Pharo.
>>>>>>>>>>
>>>>>>>>>> I had initially discarded the idea of using this project because
>>>>>>>>>> it required a plugin and the information of the plugin was outdated 
>>>>>>>>>> on
>>>>>>>>>> squeaksource. However, having evaluated superficially the complexity 
>>>>>>>>>> of
>>>>>>>>>> doing it with nativeboost (because too many external c struct 
>>>>>>>>>> involved in
>>>>>>>>>> the call), I would like to see if I am better off using this wrapper.
>>>>>>>>>>
>>>>>>>>>> I loaded it with:
>>>>>>>>>>
>>>>>>>>>> Gofer it
>>>>>>>>>>   url: 'http://www.smalltalkhub.com/mc/hernan/ProcessWrapper/main
>>>>>>>>>> ';
>>>>>>>>>>   package: 'ProcessWrapper-Core';
>>>>>>>>>>   package: 'ProcessWrapper-Plugin';
>>>>>>>>>>   package: 'ProcessWrapper-Tests';
>>>>>>>>>>   load.
>>>>>>>>>>
>>>>>>>>>> But the plugins wont load because it requires the
>>>>>>>>>> class SmartSyntaxInterpreterPlugin and apparently this file is a 
>>>>>>>>>> part of
>>>>>>>>>> the VMMaker. Is there any recent config for VMMaker in Pharo because 
>>>>>>>>>> this
>>>>>>>>>> one looks outdated:
>>>>>>>>>>
>>>>>>>>>> http://pharo.gemtalksystems.com/book/Virtual-Machine/Building/VMMakerTool/
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Pierce
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>>
>> --
>> ---
>> Philippe Back
>> Visible Performance Improvements
>> Mob: +32(0) 478 650 140 | Fax: +32 (0) 70 408 027
>> Mail:p...@highoctane.be | Web: http://philippeback.eu
>> Blog: http://philippeback.be | Twitter: @philippeback
>> Youtube: http://www.youtube.com/user/philippeback/videos
>>
>> High Octane SPRL
>> rue cour Boisacq 101 | 1301 Bierges | Belgium
>>
>> Pharo Consortium Member - http://consortium.pharo.org/
>> Featured on the Software Process and Measurement Cast -
>> http://spamcast.libsyn.com
>> Sparx Systems Enterprise Architect and Ability Engineering EADocX Value
>> Added Reseller
>>
>>
>>
>

Reply via email to