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