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]; ) 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 >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >> >> >> > >