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


>
> 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
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>>
>

Attachment: NHE-Test-NicolaiHess.1.mcz
Description: Binary data

Reply via email to