[Mono-list] Running vs2005 beta 2 compiled code on mono...

Alex Mohr amohr at cs.wisc.edu
Fri Jul 1 19:59:39 EDT 2005

>I have tried /clr:pure. If seems to be promising but I don't recommend using
>it. Just look at the resulting exe file using ildasm. It's full of imported
>functions from CRT. /clr:pure only means that you cannot declare unmanaged
>code but you can use it inline without P/Invoke.
>So the resulting code is still not entirely managed.
>Use /clr:safe instead. You have to be able to run it on Mono. It does not
>allow unmanaged code to be referenced and the assembly will be pure
>verifiable IL.

Thanks for all the info and advice.

Unfortunately /clr:safe just isn't a viable option.  You can't use any
native datatypes if you have this switch on.  You can't do: struct foo {
int bar, baz; };

Here's my perfect world:

We currently compile our low-level c++ libraries natively and we need to
continue to be able to do that.

To build our new software, ideally we could use our low-level libs in
the mid-level code by just compiling it all to IL (using /clr:pure).
This way the mid-level code could build .net objects for itself and the
higher-level stuff to use.  Then (ideally) we could run everywhere with
the same code (and possibly one build!) using mono.

Since this now seems impossible, I'm looking at other options:

I don't think we can use whidbey-style c++ interop because the only
c++/cli compiler is in visual studio.  P/Invoke seems bad because our
low-level libs are heavily object oriented c++ and P/Invoke seems to
only work well for c-style interfaces.

I'm struggling to figure out how to best do this sort of thing.


More information about the Mono-list mailing list