mono嵌入式应用研究(二):虚拟机的初始化
来源:互联网 发布:网络大学是什么 编辑:程序博客网 时间:2024/06/07 06:25
mono本身是用ASNI C开发的,所以mono的使用也就是调用一堆API,mono使用的句柄和类型对外开放时都被隐藏了,比如MonoClass、MonoObject,对外声明的都只是空结构指针,mono的API返回的对象,类型相关的比如MonoClass、MonoClassField是跟随Assembly存在的,不需要自己释放。获得一些托管代码的对象,比如MonoObject、MonoString这些指针只是当前有效,随时可能被移动或销毁,一般不能长期保存。如需要长期保存,可使用mono_gchandle_new将其添加引用后转化为堆句柄保存,使用时用mono_gchandle_get_target来获取对应的MonoObject,不需要后需要使用mono_gchandle_free来释放引用,以使其能被gc回收。另外还有一些API的返回也需要自己手动释放,比如mono_string_to_utf8返回的字符串需要使用mono_free来释放。
总之,mono的API文档非常简陋,几乎可以说没什么文档,所以使用起来很吃力,经常需要去看mono提供的例子和mono的源码来摸索正确的使用方法。
mono初始化的开始是调用mono_jit_init初始化并创建一个AppDomain,AppDomain是C#程序运行的一个独立环境,不同AppDomain内的对象是不能被相互访问的,相当于一个隔离作用。在我的插件式服务器构架里,除了主AppDomain外,我使用mono_domain_create_appdomain为每一个插件创建了一个AppDomain,以使插件之间可以相互隔离不干扰。mono_jit_init需要传入一个c#的dll文件名,mono从这个dll中获取AppDomain的名称和.net framework的版本。dll文件名如果不是一个直接可加载路径的话,mono会从设置好的assembly路径去寻找,mono_set_assemblies_path可以来设置这个查找路径。另外使用mono_jit_init_version可以直接传入AppDomain名称和.net framework的版本号来创建AppDomain,而不需要通过一个dll。
另外在如果有一些特别需求的话,在调用mono_jit_init创建一个AppDomain前,我们还可以做一些别的事情:
mono_trace_set_log_handler、mono_trace_set_print_handler、mono_trace_set_printerr_handler这三个API可以设置自己的mono信息和错误日志处理函数,而不是直接输出到终端。
mono_set_assemblies_path可以设置assembly查找路径。
mono_set_config_dir可以设置mono的配置文件路径,主要是做一些外部dll引用函数的重映射。
mono_config_parse直接解析给定的mono配置文件。
mono_debugger_agent_parse_options为mono的远程调式代理设置一些参数,例如:“transport=dt_socket,address=127.0.0.1:12345,server=y,suspend=y”表示在地址127.0.0.1端口12345开启调试代理侦听,mono虚拟机启动后挂起,等待调式客户端连接进入后继续运行。
mono_debug_init这个执行了远程调式代理的初始化,等mono_jit_init时调试代理就会启动。
- mono嵌入式应用研究(二):虚拟机的初始化
- mono嵌入式应用研究
- mono嵌入式应用研究(一):编译
- mono嵌入式应用研究(三):注册内部函数
- mono嵌入式应用研究(三):注册内部函数
- mono嵌入式应用研究(四):Assemly的加载与执行
- USB研究(二)U盘驱动前的初始化
- Jikes 研究虚拟机(RVM)二 JVM 的组织
- Mono 的Virtual PC 虚拟机
- Mono v1.2.51 - 开源版本的.NET框架,Mono,Mono下载,Mono框架开发,Mono学习,Mono是什么,Mono浅谈,Mono研究
- Mono初探--创建你的第一个Mono应用程序 (二)
- 基于ARM 的嵌入式系统程序开发要点-(二)系统的初始化过程
- 嵌入式应用之-初始化部分
- 嵌入式入门之各个系统之间的通信(虚拟机中的linux,Windows,嵌入式开发板系统)-samba(二)
- 面向多媒体应用的嵌入式Linux实时性研究
- Mono入门教程(二)--------------Mono的Windows调试环境搭建
- kfs嵌入式文件系统应用指南(二)
- Paho MQTT 嵌入式c客户端研究笔记 (二)
- ImageLoader使用详解
- c# log组件 log4net使用介绍
- ImageLoader使用详解---ImageLoaderUtils
- 控件的阴影效果
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
- mono嵌入式应用研究(二):虚拟机的初始化
- 噪声库(noiseX-92)
- Python中"=“,浅复制和深复制的理解
- Mac OS 开发 -- 直接扩展系统类的属性之NSView添加backgroudColor属性
- 阿里云RDS不支持FEDERATED引擎
- 哪里可以买卖中国大数据
- Storm-Starter分析————ReachTopology
- 解决在极光推送的时候会出现一个 JPush提示:缺少统计代码
- angular.js实现列表orderby排序