mono fun注册教程
前言
开发环境搭建
操作系统:windows7
Mono版本:4.4
下载后安装mono,安装过程略过。64位安装完成后将在:C:\Program Files\Mono到生成Mono的Windows的运行时。32位可能会在C:\Program Files (x6)\Mono下
设置环境变量,将添加以下变量至Path路径下面:C:\Program Files\Mono\bin
创建VS工程并初始化—Mono,Hello World##
####一、新建工程并依赖
####二、根据下载的mono的版本,设置编译生成的目标位X64 或 X6
####三、设置包含路径、库目录路径、附加依赖项
include:
C:\Program Files\Mono\include\mono-2.0
lib
C:\Program Files\Mono\lib
附加依赖项
writeline教程mono-2.0.lib
####四、拷贝mono的运行dll到工作目录下面【关键步骤】
>特别说明:由于mono运行时,bin中提供的mono-2.0.dll并不完整,因此需要到mono提供的完整的dll。同样还是在C:\Program Files\Mono\bin目录下面,有libmonoboehm-2.0.dll、libmonosgen-2.0.dll。
这两个都可以,由于没有认真分析两个dll之间的差异,所以就没有深究了,复制其中一个到C++工作路径下面。并修改其名称为:mono-2.0.dll
####五、编写HelloMono,并通过Mono编译器生成dll,用于在C++中调用运行
Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MonoCsharp { public static class MainTest { static void Main() { System.Console.WriteLine(你好,世界); System.Console.Read(); } } }
在Window下运行cmd命令提示符,并制定到上面源码所在位置:并输入Mono的命令:
###mcs Program.cs -t:library
(如果命令中提示:不是内部或外部命令,也不是可运行的程序),那么就检查下是否设置了环境变量
此时就会生成Program.cs所对应的C#dll
####最后一步,在C++中调用运行C#脚本
#include <mono/jit/jit.h> #include <mono/metadata/assembly.h> #include <mono/metadata/class.h> #include <mono/metadata/debug-helpers.h> #include <mono/metadata/mono-config.h> MonoDomain *domain; int main() { // Program.cs所编译dll所在的位置 const char* managed_binary_path = E:/2017/2/MonoRunTime/MonoRunTime/Program.dll; //获取应用域 domain = mono_jit_init(Test); //加载程序集ManagedLibrary.dll MonoAssembly* assembly = mono_domain_assembly_open(domain, managed_binary_path); MonoImage* image = mono_assembly_get_image(assembly); // =====================================================准备调用 //获取MonoClass,类似于反射 MonoClass* main_class = mono_class_from_name(image,MonoCsharp, MainTest); //获取要调用的MonoMethodDesc,主要调用过程 MonoMethodDesc* entry_point_method_desc = mono_method_desc_new(MonoCsharp., true); MonoMethod* entry_point_method = mono_method_desc_search_in_class(entry_point_method_desc, main_class); mono_me
thod_desc_free(entry_point_method_desc); //调用方法 mono_runtime_invoke(entry_point_method, NULL, NULL, NULL); //释放应用域 mono_jit_cleanup(domain); return 0; }
如果不出意外:就会出现C#工程的窗口了!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论