Mono提供脚本机制(C#绑定C++)
1.下载安装最新版mono,https://www.mono-project.com/
2.添加头文件路径C:\Program Files\Mono\include\mono-2.0,添加库路径C:\Program Files\Mono\lib,添加依赖项mono-2.0-sgen.lib
3.c#类库工程
using System; namespace csharp
{
public class BindingTest
{
static void sayhello()
{
Console.WriteLine("hello world, [cpp binding csharp test]");
}
}
}
4.c++引入mono运行时
// cpp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include "pch.h"
#include <iostream>
#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>
#include <exception>
//#include <direct.h> int main()
{
//std::cout << "Hello World!\n";
// 打印当前路径
//std::cout << _getcwd(nullptr, 0); MonoDomain *domain;
//const char *csharp_dll = "../csharp/bin/debug/csharp.dll";
const char *csharp_dll = "../csharp/BindingTest.dll";
try
{
// 初始化JIT
domain = mono_jit_init("csharp");
// 加载程序集
MonoAssembly *assembly = mono_domain_assembly_open(domain, csharp_dll);
MonoImage *image = mono_assembly_get_image(assembly);
// 获取MonoClass
MonoClass *mono_class = mono_class_from_name(image, "csharp", "BindingTest");
// 获取方法
//MonoMethodDesc *method_desc = mono_method_desc_new("csharp.BindingTest:Main()", true);
MonoMethodDesc *method_desc = mono_method_desc_new("csharp.BindingTest:sayhello()", true);
MonoMethod *method = mono_method_desc_search_in_class(method_desc, mono_class);
mono_method_desc_free(method_desc);
// 调用方法
mono_runtime_invoke(method, nullptr, nullptr, nullptr);
// 释放JIT
mono_jit_cleanup(domain);
}
catch (std::exception* e)
{
std::cout << e->what();
}
} // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单 // 入门提示:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
5.运行结果
unity3d关于mono研究的主题文章:http://www.cnblogs.com/lancidie/p/5877231.html
Mono提供脚本机制(C#绑定C++)的更多相关文章
- mono搭建脚本整理
一.介绍 mono项目致力于能够使得开发人员在Linux用C#开发程序. 该项目的目标是创建一系列符合标准ECMA (Ecma-334和Ecma-335)的.Net 工具, 包括C #编译器和共同语言 ...
- Java的脚本机制、编译器API
学习 xxl-job 定时任务时了解到基于 JVM 的 Grovvy 脚本语言.搭建 Jenkins 时知道了编译API 1. Java 脚本机制 Java 的脚本 API 可以让我们调用 JavaS ...
- 值提供器 AND 模型绑定器
本章介绍了值提供器的作用,ASP MVC自带的5中值提供器.以及模型绑定器的作用,自定义模型绑定器并使用自定义的模型绑定器(类型上加上[ModelBinder(typeof(xx))]或者在全局模型绑 ...
- javascript内置函数提供的显式绑定
内置函数提供的显式绑定 最近在开发中遇到使用arr.map(module.fun) 这样的写法时(在一个模块调用了另外一个模块的方法), 造成了函数中this丢失的问题, 显示为undefined, ...
- Python虚拟机类机制之绑定方法和非绑定方法(七)
Bound Method和Unbound Method 在Python中,当对作为属性的函数进行引用时,会有两种形式,一种称为Bound Method,这种形式是通过类的实例对象进行属性引用,而另一种 ...
- 使用cocos2d脚本生成lua绑定
这几天要老大要求把DragonBones移到cocos2dx 3.0 里边,并且绑定lua使用接口.因为刚学lua,使用的引擎也刚从2.2改为3.0,各种不熟悉,折腾了好几天才弄完,有空了总结一下 这 ...
- 关于js脚本宿主对脚本代码的绑定
脚本代码绑定,Unity3D是这样做的.为了体现Unity3D的基于对象设计,Unity3D可以为每个对象绑定多个脚本文件,可以是js,可以是cs,也可以是boo. threejs/editor也有与 ...
- 【连载】redis库存操作,分布式锁的四种实现方式[四]--基于Redis lua脚本机制实现分布式锁
一.redis lua介绍 Redis 提供了非常丰富的指令集,但是用户依然不满足,希望可以自定义扩充若干指令来完成一些特定领域的问题.Redis 为这样的用户场景提供了 lua 脚本支持,用户可以向 ...
- C#怎么在生成解决方案的过程中执行perl脚本(C#早期绑定)
转载 怎么在生成解决方案的过程中执行perl脚本 早期绑定在编译期间识别并检查方法.属性.函数,并在应用程序执行之前执行其他优化.在这个绑定中,编译器已经知道它是什么类型的对象以及它拥有的方法或属性. ...
随机推荐
- Python中autoescape标签使用详解
1.spaceless标签:移除html标签中的空白字符.包括空格.tab键.换行符,示例代码如下: {% spaceless %}具体内容{% endspaceless %} 2.autoescap ...
- .NetCore学习笔记:四、AutoMapper对象映射
什么是AutoMapper?AutoMapper是一个简单的小型库,用于解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码.这种类型的代码是相当沉闷和无聊的写,所以为什么不发明一个工具来 ...
- 【54】目标检测之Bounding Box预测
Bounding Box预测(Bounding box predictions) 在上一篇笔记中,你们学到了滑动窗口法的卷积实现,这个算法效率更高,但仍然存在问题,不能输出最精准的边界框.在这个笔记中 ...
- A tiny problem with integers
# A tiny problem with integers 给定长度为N的数列A,然后输入M行操作指令. 第一类指令形如“C l r d”,表示把数列中第l~r个数都加d. 第二类指令形如“Q X” ...
- java 测试 (junit+ junit 断言 + postman)
实际开发中,除了开发,我想测试也是必不可少的一环吧.从简单的@Test .main 方法测试 到 页面测试 ,断言,postman. bug是无处不在,随时发生的事,高效率的调试.检测可以节省大量的开 ...
- 论文阅读笔记(二十三)【ECCV2018】:Robust Anchor Embedding for Unsupervised Video Person Re-Identification in the Wild
Introduction 当前主要的非监督方法都采用相同的训练数据集,这些数据集在不同摄像头中是对称的,即不存在单个行人的错误项,这些方法将在实际场景中效果下降.在本方法中,作者引入了非对称数据,如下 ...
- 数据库 left()、length()函数
数据库 left().length()函数 1.Mysql的length()函数: length()函数主要用于计算字符串的长度,用法也很简单:length(要计算的字符串) 就可以计算出字符串的长度 ...
- 适合小白的大白话讲解--->Git与Github的区别
本文由 伯乐在线 - 听风 翻译,艾凌风 校稿.未经许可,禁止转载!英文出处:Red Radger.欢迎加入翻译组. 本文旨在使用通俗易懂的文字,讲解版本控制背后的理论,以便你能对程序员们如何工作有个 ...
- .net core 中如何读取 appsettings.json 相关配置
appsettings.json如下 { "Logging": { "LogLevel": { "Default": "Debug ...
- 前端-2019 history 与 location
HTML5 API解析之Window.history历史记录 1.简介 window.history是用来保存用户在一个会话期间的网站访问记录,并提供相应的方法进行追溯.其对应的成员如下: 方法:ba ...