C# Matlab 相互调用
测试环境
VisualStudio2013 / .net4.0
Matlab2015b
高版本的matlab对外接其它语言做得很方便了,并不需要一堆的配置。
其它语言与matlab的交互操作也类似。
C#调用Matlab
基本思路:将matlab函数打包成DLL文件,联合matlab数据支持DLL(MWArray.dll),交付给其它语言程序使用。
1、Matlab端的操作
编写matlab函数:
function [result,m,n] = GetSelfMultiplyResult(list)
% 计算 矩阵与其转置矩阵的乘积
% 测试返回多个结果
result = list*list';
[m,n] = size(result);
end
function result = GetSelfSquareResult(list)
% 计算 矩阵各元素平方后的结果
result = list.^;
end
打包函数:
找到库编译器(LibraryCompiler)
打包函数
如下图所示,
1)选择目标类型(TYPE);
2)添加需要打包的函数文件;
3)重命名库名称。
重命名类名称,或者添加类,分配函数所属类。完成打包操作。
在生成的文件中,找到“for_redistribution_files_only”文件夹,里面有
CalcMatResult.dll CalcMatResultNative.dll 两个dll文件,均可使用。
另外,MWArray.dll 在matlab安装目录中,参考路径:
X:\Program Files\MATLAB\R2015b\toolbox\dotnetbuilder\bin\win64\v2.0\
也可以直接使用Everything等软件直接搜索。
2、C#端的操作
C#端用到的就是 MWArray.dll 和 CalcMatResultNative.dll 这两个DLL文件。
添加DLL引用
演示代码
using System;
using CalcMatResultNative; //添加引用
using MathWorks.MATLAB.NET.Arrays; //添加引用 namespace CsharpMatlabDemo
{
class Program
{
static void Main(string[] args)
{
int[,] list ={{},{},{},{}}; //列向量 MWArray array = new MWNumericArray(list); CalcMatResultNative.Multiply multi = new Multiply();
object resultObj = multi.GetSelfMultiplyResult(, array);// 3 表示返回的结果数量,要小于等于matlab对应函数实际的返回值数量
object[] resultObjs = (object[]) resultObj; double[,] calcResult = (double[,])resultObjs[];
double[,] sizem = (double[,])resultObjs[];
double[,] sizen = (double[,])resultObjs[]; Console.ReadKey();
}
}
}
Matlab调用C#
matlab调用C#更加简单,先将C#代码编译成dll库,matlab中直接引用即可调用。
如果失败,注意检查使用的.net版本是否过高,平台(x64/86)是否匹配等问题。
注意选择Release版本的DLL(C#的Bebug版本也可以引用,但C++的不行)。
1、C#端操作
代码
namespace MatlabInterface
{
public class Dialog
{
public static bool ShowSelectMsg(string msg, string title)
{
DialogResult r = MessageBox.Show(msg, title, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
return r == DialogResult.Yes;
} public string Msg { get; set; } public void ShowMsg()
{
MessageBox.Show(Msg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
}
2、Matlab操作
% 调用C# dll % 引用绝对路径
NET.addAssembly('R:\Users\GrassPhy\Desktop\MatlabCsharpDemo\MatlabInterface.dll'); % 静态方法调用
select = MatlabInterface.Dialog.ShowSelectMsg('请选择...','提示');
if select
disp('yes');
else
disp('no');
end % 成员方法调用
dialog = MatlabInterface.Dialog();
dialog.Msg = '提示信息';
dialog.ShowMsg();
参考:
C#中使用MATLAB
C# Matlab 相互调用的更多相关文章
- 【环境】VS2013和MATLAB相互调用混合编程
Visual Studio和MATLAB混合编程,有两种方法: 1 MATLAB调用C程序: 2 VS调用MATLAB(目前见到的都是VS,其他编译器如codeblocks,或不提供这项功能): 前一 ...
- Android和JavaScript相互调用的方法
转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...
- 多个Activity相互调用和Intent
MainActivity.java和OtherActivity.java的相互调用 首先MainActivity.java是Android程序自带的,新建一个类OtherActiviy extends ...
- JS代码和OC代码的相互调用
JS调用OC 很多应用里面或多或少的调用了网页,来达到绚丽的效果,所谓的JS调用OC.....举个例子吧,网页上有个按钮 点击按钮跳转界面,跳转的动作由OC的代码实现. OC调用JS 还是举个例子,我 ...
- C程序与Lua脚本相互调用
Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...
- Unity3D中C#和js方法相互调用
通过查找资料,Unity3D中C#和js要相互调用彼此的方法,js文件必须放在"Standard Assets". "Pro Standard Assets" ...
- Unity3d 脚本相互调用
unity中三种调用其他脚本函数的方法 第一种,被调用脚本函数为static类型,调用时直接用 脚本名.函数名().很不实用…… 第二种,GameObject.Find("脚本所在物体名& ...
- Lua与C++相互调用
{--1.环境--} 为了快速入手,使用了小巧快速的vc++6.0编译器 以及在官网下载了Lua安装包..官网地址{--http://10.21.210.18/seeyon/index.jsp--} ...
- 关于action script与js相互调用的Security Error问题
大家都知道,as和js相互调用可以通过ExternalInterface.call和ExternalInterface.addCallback来进行. 比较好的做法是使用之前通过ExternalInt ...
随机推荐
- 使用Linq动态排序
Linq排序很方便,如果能动态创建Expression再排序就更方便了. 正序还是倒序排列 var order = typeof(Enumerable).GetMember(direction == ...
- SQL之 UNION ALL 和UNION
有时候复杂的逻辑处理可以交给SQL来处理,自认为是比java处理要快点. 举个例子:如何统计每个品牌的的偏好用户数? 当时我做的处理是在java中处理这些品牌,若是品牌相同,就加一,但是这种方法很慢, ...
- WPF 自定义键盘焦点样式(FocusVisualStyle)
WPF 自带的键盘焦点样式是与传统控件样式搭配的,但 WPF 凭着其强大的自定义样式的能力,做出与传统控件样式完全不同风格的 UI 简直易如反掌.这时,其自带的键盘焦点样式(FocusVisualSt ...
- python,java操作mysql数据库,数据引擎设置为myisam时能够插入数据,转为innodb时无法插入数据
今天想给数据库换一个数据引擎,mysiam转为 innodb 结果 python 插入数据时失败,但是自增id值是存在的, 换回mysiam后,又可以插入了~~ 想换php插入试试,结果php数据引擎 ...
- [LeetCode系列]翻转链表问题II
给定一个链表和两个整数m, n, 翻转链表第m个节点到第n个节点(从1开始计数). 如, 给定链表: 1->2->3->4->5->NULL, 以及 m = 2, n = ...
- 使用AWK分析Oracle系统锁定、Hang状态
在早期Oracle版本中,由于技术不成熟等原因,数据库锁定和僵死状态还是时有发生的.对待这些问题,老先生们的处理策略无外乎是“重启”和“考究”两种策略.所谓“重启”,通过强制的重启服务器或者数据库,将 ...
- oracle的时间
今天发现之前从oracle导出的数据时间格式很奇怪: "ACTIVETIME","ACTIVITYID" "2018-08-10 06:08:43&q ...
- opencv读取中文路径报错的问题
) ## 经验证,不需要再转bgr,myImread的读图结果已经是和imread一样的 return img
- jeecg选择按钮带入其他单据值
前端的标签 <input class="inputxt" id="fshimian" name="fshimian" ignore=& ...
- JVM内存管理之JAVA语言的内存管理概述
引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...