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 >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >>> >>> >> >> >
NHE-Test-NicolaiHess.1.mcz
Description: Binary data