典型的C程序是这样的:
嵌入Mono Runtime后就变成了这样:Mono Runtime作为一个虚拟执行系统,扩大了地址空间。
Mono的embed相关API把Mono Runtime暴露给C代码。
Mono Runtime 初始化之后,就可以加载CIL或.NET可以识别的代码了(比如C#),像这样:
然后C代码就被称之为非托管代码,CIL编译器生成的CIL代码就叫托管代码。
托管代码调用非托管代码的方式有两种:
- P/Invoke
- 使用底层的Mono embed API
嵌入Mono Runtime 的流程如下:
- 编译和链接Mono Runtime
- 初始化Mono Runtime
- 选择性地把C代码暴露给CIL
具体参考: http://www.mono-project.com/docs/advanced/embedding/#embedding-the-runtime