嵌入式mono的c++调用c#示例

本文介绍了如何在嵌入式环境中使用C++调用C#代码,支持基本数据类型、引用类型、结构体、类对象、数组、指针数组和字符串等参数。通过Mono框架,C++能够与C#进行交互,具体实现方法包括main.cpp、test_case.h和C#的TestSharp.cs文件。
摘要由CSDN通过智能技术生成

      一、支持

      通过mono, c++调用c#的可以传入的参数类型支持类型有:

      1、基本数据类型(bool float double enum...)

      2、引用类型

      3、结构体类型

      4、类对象

      5、数组

      6、指针数组

      7、字符串

      mono环境搭建方法,参考上一篇博客

     二、示例

      下面代码演示,各种类型调用的方法:

       mian.cpp和test_case.h在c++工程中

     TestSharp.cs在c#dll中

     main.cpp


#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 "TestCase.h"

MonoDomain* domain;


int main()
{
	// Program.cs所编译dll所在的位置
	const char* managed_binary_path = "G:/Project/Mono/MonoTest/MonoDll/bin/Debug/netcoreapp3.1/MonoDll.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, "MonoDll", "TestCSharp");

	// 创建类对象
	MonoObject* mono_object = mono_object_new(domain, main_class);

	TestCase1(mono_object);
	TestCase2(mono_object);
	TestCase3(mono_object);
	TestCase4(mono_object, image
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以通过subprocess模块来调用其他语言编写的可执行程序,包括C#、Matlab和C++等语言编写的可执行文件。下面分别介绍一下调用这些语言编写的可执行程序的方法。 调用C#可执行程序 可以使用mono命令来运行C#可执行程序。需要在Python中使用subprocess模块调用该命令。具体操作如下: ```python import subprocess # 调用C#可执行程序 process = subprocess.Popen(['mono', 'your_csharp_executable_file.exe'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = process.communicate() # 输出执行结果 print(output.decode()) print(error.decode()) ``` 调用Matlab可执行程序 可以使用matlab命令来运行Matlab可执行程序。需要在Python中使用subprocess模块调用该命令。具体操作如下: ```python import subprocess # 调用Matlab可执行程序 process = subprocess.Popen(['matlab', '-r', 'your_matlab_executable_file'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = process.communicate() # 输出执行结果 print(output.decode()) print(error.decode()) ``` 调用C++可执行程序 可以直接使用C++编译出来的可执行程序来运行。需要在Python中使用subprocess模块调用该程序。具体操作如下: ```python import subprocess # 调用C++可执行程序 process = subprocess.Popen(['your_cpp_executable_file'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = process.communicate() # 输出执行结果 print(output.decode()) print(error.decode()) ``` 以上是调用C#、Matlab和C++可执行程序的基本方法,根据实际情况可以做一些调整。另外,需要注意的是,调用的可执行程序需要在系统中正确安装并配置好环境变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值