[Mono-list] porting from .NET to Mono
    Jonathan Pryor 
    jonpryor at vt.edu
       
    Thu Nov 18 15:10:17 EST 2010
    
    
  
On Thu, 2010-11-18 at 08:06 -0800, Steve Lessard wrote:
> I would like to get your advice on porting code from .NET to Mono.  I
> have a class library that I wrote for .NET 3.5 on Windows. In addition
> to working in .NET on Windows I want to get it working in Mono on
> non-Windows platforms (especially OS X on Intel chips.) This class
> library is currently about 90% C# and 10% managed C++.
C++/CLI that is not /clr:pure is not supported by mono on any platform.
> My initial thoughts on a plan for porting the code:
>       * If available replace each p/invoke to a Win32 API with a call
>         to a Mono class/method providing similar functionality.
Doubtful; if you could do that, then there'd likely be a .NET method you
could be using already (in which case, wouldn't you already be using
it?).
>       * If not available I plan to leave the p/invoke in place and
>         build a platform specific native library (.dylib on OS X)
>         providing similar functionality with the same signature.
A slight variation, there's:
        http://mono-project.com/DllMap
This allows you to change the native library name and the function
names, as long as the functions have identical signatures...
>       * Stub out or #ifdef out the code entirely. (For example the
>         code that ties in to Windows event logging is not essential
>         functionality.)
Generally not ideal, as it means you need to do multiple builds for each
platform.
Then there's option 4: Runtime platform checks:
        static readonly bool IsWinApi = Path.DirectorySepartorChar == '\
        \';
        /* ... */
        if (IsWinApi)
                CallWinApiMethod ();
        else
                DoSomethingElse();
Runtime checks are generally preferred.
> My initial thoughts on a strategy for porting the code:
>       * Port this library to Mono on Windows
Good first step.
>       * Port it to Mono on WINE on non-Windows platforms
Skip.
>       * Port it to Mono on non-Windows platforms
Good idea.
> My questions:
>      1. Can Mono on Windows run managed C++ code?
I do not think so, unless the C++/CLI code is compiled as /clr:pure.
>      1. Assuming the managed C++ code makes no platform specific
>         calls, is clean for 32/64 bit architectures, clean for bit
>         endianness could it be recompiled can Mono on non-Windows
>         platforms run managed C++ code?
Again, is it compiled as /clr:pure?  If it is, it should run; if it
isn't, it won't run.
>      1. Would porting to Mono on WINE on OS X as an intermediate step
>         be worth the effort?
No.
>      1. Is there a better or alternative porting strategy that you
>         would recommend?
No.
 - Jon
    
    
More information about the Mono-list
mailing list