2015-05-06 12:10 GMT+02:00 p...@highoctane.be <p...@highoctane.be>: > I've loaded your package. > > A prerequisite is to load OS-Window to make it work. > > I've got the DLL call working nicely and the nativeboost with the > structure freezing. >
This is because you have a recursive datastructure description, but acutually the IP_ADAPTER_INFO structure is not recursive: PIP_ADAPTER_INFO class >>fieldsDex ^ #( PIP_ADAPTER_INFO nextVariable; DWORD ComboIndex; CHAR AdapterName; CHAR Description; ....) The "nextVariable" should be a pointer to the structure. from MSDN: struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO *Next; "<- pointer" DWORD ComboIndex; char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; UINT AddressLength; .... > > 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 >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>> >> > >