mac address on windows

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
30 messages Options
12
Reply | Threaded
Open this post in threaded view
|

mac address on windows

Usman Bhatti
Hello,

Has anyone tried to retrieve MAC address(es) of a windows machine using Pharo? I have tried two options thus far without any success:

1/ OSProcess: I tried  (PipeableOSProcess command: 'ipconfig /all') output. This opens a command prompt on windows machine without anything happening inside it. Although when I try it on Linux/Mac (with ifconfig), I retrieve the output of the command. Another option is to do OSProcess command: 'ipconfig' but I wasn't able to find a way to retrieve the output of the command.

2/ Nativeboost comes with a set of built-in command to interact with Windows (class NBWin32Shell). One can get environment variables, etc. But I wasn't able to find a way to execute a command on the line and get the results.


Would someone know of a way to retrieve the MAC addresses in Windows through the way listed above or any other form from the Pharo image?

thanks in advance,

Usman



Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

philippeback

looks like a bit of C code is required.

http://stackoverflow.com/questions/13646621/how-to-get-mac-address-in-windows-with-c

Maybe a good time to put the C code generator to the test.

Phil

Le 2 mai 2015 15:55, "Usman Bhatti" <[hidden email]> a écrit :
Hello,

Has anyone tried to retrieve MAC address(es) of a windows machine using Pharo? I have tried two options thus far without any success:

1/ OSProcess: I tried  (PipeableOSProcess command: 'ipconfig /all') output. This opens a command prompt on windows machine without anything happening inside it. Although when I try it on Linux/Mac (with ifconfig), I retrieve the output of the command. Another option is to do OSProcess command: 'ipconfig' but I wasn't able to find a way to retrieve the output of the command.

2/ Nativeboost comes with a set of built-in command to interact with Windows (class NBWin32Shell). One can get environment variables, etc. But I wasn't able to find a way to execute a command on the line and get the results.


Would someone know of a way to retrieve the MAC addresses in Windows through the way listed above or any other form from the Pharo image?

thanks in advance,

Usman



Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Usman Bhatti
Yes, I already started exploring this path but there are few a problems that I'll share in another thread.

On Sat, May 2, 2015 at 4:43 PM, [hidden email] <[hidden email]> wrote:

looks like a bit of C code is required.

http://stackoverflow.com/questions/13646621/how-to-get-mac-address-in-windows-with-c

Maybe a good time to put the C code generator to the test.

Phil

Le 2 mai 2015 15:55, "Usman Bhatti" <[hidden email]> a écrit :
Hello,

Has anyone tried to retrieve MAC address(es) of a windows machine using Pharo? I have tried two options thus far without any success:

1/ OSProcess: I tried  (PipeableOSProcess command: 'ipconfig /all') output. This opens a command prompt on windows machine without anything happening inside it. Although when I try it on Linux/Mac (with ifconfig), I retrieve the output of the command. Another option is to do OSProcess command: 'ipconfig' but I wasn't able to find a way to retrieve the output of the command.

2/ Nativeboost comes with a set of built-in command to interact with Windows (class NBWin32Shell). One can get environment variables, etc. But I wasn't able to find a way to execute a command on the line and get the results.


Would someone know of a way to retrieve the MAC addresses in Windows through the way listed above or any other form from the Pharo image?

thanks in advance,

Usman




Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Pierce Ng-3
In reply to this post by Usman Bhatti
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.

Pierce

Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Usman Bhatti


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce


Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Ben Coman
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce



Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Usman Bhatti
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).

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 that accepts a PIP_ADAPTER_INFO  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.

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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce




Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

philippeback

On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <[hidden email]> 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!

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 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 that accepts a PIP_ADAPTER_INFO  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?

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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce








 

Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Thierry Goubier
In reply to this post by Usman Bhatti
Le 05/05/2015 18:28, Usman Bhatti a écrit :

> 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).
>
> 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.
>
> With ProcessWrapper, I could not load the classes essential for making
> the plugin work.

ProcessWrapper is loaded with GitFileTree in Pharo3 and Pharo4.

Can you detail what doesn't work?

Thierry

>
> HTH,
>
> Usman
>
>
>
>
> On Mon, May 4, 2015 at 2:54 PM, Ben Coman <[hidden email]
> <mailto:[hidden email]>> 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 <[hidden email]
>     <mailto:[hidden email]>> wrote:
>
>
>
>         On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]
>         <mailto:[hidden email]>> 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
>
>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Usman Bhatti
In reply to this post by philippeback


On Tue, May 5, 2015 at 7:34 PM, [hidden email] <[hidden email]> wrote:

On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <[hidden email]> 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 that accepts a PIP_ADAPTER_INFO  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).



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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce








 


Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Usman Bhatti
In reply to this post by Thierry Goubier
On Tue, May 5, 2015 at 7:54 PM, Thierry Goubier <[hidden email]> wrote:
Le 05/05/2015 18:28, Usman Bhatti a écrit :
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).

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.

With ProcessWrapper, I could not load the classes essential for making
the plugin work.

ProcessWrapper is loaded with GitFileTree in Pharo3 and Pharo4.

Can you detail what doesn't work?

When doing:

Gofer it
  package: 'ProcessWrapper-Core';
  package: 'ProcessWrapper-Plugin';
  package: 'ProcessWrapper-Tests';        
  load.    

Plugin classes couldn't be loaded because they require SmartSyntaxInterpreterPlugin class. I found a few posts mentioning that the class should be present in the VMMaker but I didn't dig further.

regards.
 


Thierry


HTH,

Usman




On Mon, May 4, 2015 at 2:54 PM, Ben Coman <[hidden email]
<mailto:[hidden email]>> 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 <[hidden email]
    <mailto:[hidden email]>> wrote:



        On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]
        <mailto:[hidden email]>> 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







Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Nicolai Hess
In reply to this post by Usman Bhatti


2015-05-06 9:53 GMT+02:00 Usman Bhatti <[hidden email]>:


On Tue, May 5, 2015 at 7:34 PM, [hidden email] <[hidden email]> wrote:

On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <[hidden email]> 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 that accepts a PIP_ADAPTER_INFO  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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce








 



Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Thierry Goubier
In reply to this post by Usman Bhatti


2015-05-06 9:57 GMT+02:00 Usman Bhatti <[hidden email]>:
On Tue, May 5, 2015 at 7:54 PM, Thierry Goubier <[hidden email]> wrote:
Le 05/05/2015 18:28, Usman Bhatti a écrit :
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).

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.

With ProcessWrapper, I could not load the classes essential for making
the plugin work.

ProcessWrapper is loaded with GitFileTree in Pharo3 and Pharo4.

Can you detail what doesn't work?

When doing:

Gofer it
  package: 'ProcessWrapper-Core';
  package: 'ProcessWrapper-Plugin';
  package: 'ProcessWrapper-Tests';        
  load.    

Plugin classes couldn't be loaded because they require SmartSyntaxInterpreterPlugin class. I found a few posts mentioning that the class should be present in the VMMaker but I didn't dig further.

Ok.

Metacello new
  configuration: 'ProcessWrapper';
  load

Is what I use.

As far as I can see, ProcessWrapper-Plugin has little use; it contains only primitives which are in ProcessWrapper-Core. The plugin is automatically downloaded when you use the configuration, which means your Gofer script doesn't work.

The configuration in the Meta repository is one version late compared to the Smalltalkhub repository configuration. Hernan, should I update the configuration in the Meta repository?

Regards,

Thierry
 

regards.
 


Thierry


HTH,

Usman




On Mon, May 4, 2015 at 2:54 PM, Ben Coman <[hidden email]
<mailto:[hidden email]>> 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 <[hidden email]
    <mailto:[hidden email]>> wrote:



        On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]
        <mailto:[hidden email]>> 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








Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Usman Bhatti
In reply to this post by Nicolai Hess
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 <[hidden email]> wrote:


2015-05-06 9:53 GMT+02:00 Usman Bhatti <[hidden email]>:


On Tue, May 5, 2015 at 7:34 PM, [hidden email] <[hidden email]> wrote:

On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <[hidden email]> 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 that accepts a PIP_ADAPTER_INFO  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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce








 





adapters.dll (39K) Download Attachment
MACAddress-ub.1.mcz (3K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Usman Bhatti
In reply to this post by Nicolai Hess
On Wed, May 6, 2015 at 9:58 AM, Nicolai Hess <[hidden email]> wrote:


2015-05-06 9:53 GMT+02:00 Usman Bhatti <[hidden email]>:


On Tue, May 5, 2015 at 7:34 PM, [hidden email] <[hidden email]> wrote:

On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <[hidden email]> 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 that accepts a PIP_ADAPTER_INFO  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?

hardware lock.

 

 



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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce








 




Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

philippeback
In reply to this post by Usman Bhatti
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.

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 <[hidden email]> 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 <[hidden email]> wrote:


2015-05-06 9:53 GMT+02:00 Usman Bhatti <[hidden email]>:


On Tue, May 5, 2015 at 7:34 PM, [hidden email] <[hidden email]> wrote:

On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <[hidden email]> 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 that accepts a PIP_ADAPTER_INFO  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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce








 






Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Nicolai Hess


2015-05-06 12:10 GMT+02:00 [hidden email] <[hidden email]>:
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;

....








 
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 <[hidden email]> 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 <[hidden email]> wrote:


2015-05-06 9:53 GMT+02:00 Usman Bhatti <[hidden email]>:


On Tue, May 5, 2015 at 7:34 PM, [hidden email] <[hidden email]> wrote:

On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <[hidden email]> 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 that accepts a PIP_ADAPTER_INFO  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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce








 







Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

Henrik Sperre Johansen

On 06 May 2015, at 12:29 , Nicolai Hess <[hidden email]> wrote:



2015-05-06 12:10 GMT+02:00 [hidden email] <[hidden email]>:
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;

....

Also, the pOutBufLen parameter to GetAdaptorInfo is supposed to be a pointer to an unsigned long, holding the size of the buffer.
Setting that to an int in the NB declaration, will cause all sorts of trouble...

Cheers,
Henry
Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

philippeback
In reply to this post by Nicolai Hess


On Wed, May 6, 2015 at 12:29 PM, Nicolai Hess <[hidden email]> wrote:


2015-05-06 12:10 GMT+02:00 [hidden email] <[hidden email]>:
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;

....


 
So, what's to put in there then?
I can use FFI / NB for basic cases but never ventured into those structure.
I'd like to :-)

Phil
I





 
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 <[hidden email]> 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 <[hidden email]> wrote:


2015-05-06 9:53 GMT+02:00 Usman Bhatti <[hidden email]>:


On Tue, May 5, 2015 at 7:34 PM, [hidden email] <[hidden email]> wrote:

On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <[hidden email]> 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 that accepts a PIP_ADAPTER_INFO  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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce








 








 

Reply | Threaded
Open this post in threaded view
|

Re: mac address on windows

EstebanLM
In reply to this post by philippeback

On 06 May 2015, at 12:10, [hidden email] 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

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 <[hidden email]> 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 <[hidden email]> wrote:


2015-05-06 9:53 GMT+02:00 Usman Bhatti <[hidden email]>:


On Tue, May 5, 2015 at 7:34 PM, [hidden email] <[hidden email]> wrote:

On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <[hidden email]> 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 that accepts a PIP_ADAPTER_INFO  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 <[hidden email]> wrote:
As a complete newb to VM building I found this fairly straight forward (on a Mac btw).
cheers -ben

On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <[hidden email]> wrote:


On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <[hidden email]> 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
  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:



 

Pierce








 







12