转自禾木junjie原文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

打包函数:

  1. 找到库编译器(LibraryCompiler)

  2. 打包函数
    如下图所示,
    1)选择目标类型(TYPE);
    2)添加需要打包的函数文件;
    3)重命名库名称。

  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文件。

    1. 添加DLL引用

    2. 演示代码

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 相互调用的更多相关文章

  1. 【环境】VS2013和MATLAB相互调用混合编程

    Visual Studio和MATLAB混合编程,有两种方法: 1 MATLAB调用C程序: 2 VS调用MATLAB(目前见到的都是VS,其他编译器如codeblocks,或不提供这项功能): 前一 ...

  2. Android和JavaScript相互调用的方法

    转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...

  3. 多个Activity相互调用和Intent

    MainActivity.java和OtherActivity.java的相互调用 首先MainActivity.java是Android程序自带的,新建一个类OtherActiviy extends ...

  4. JS代码和OC代码的相互调用

    JS调用OC 很多应用里面或多或少的调用了网页,来达到绚丽的效果,所谓的JS调用OC.....举个例子吧,网页上有个按钮 点击按钮跳转界面,跳转的动作由OC的代码实现. OC调用JS 还是举个例子,我 ...

  5. C程序与Lua脚本相互调用

    Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...

  6. Unity3D中C#和js方法相互调用

    通过查找资料,Unity3D中C#和js要相互调用彼此的方法,js文件必须放在"Standard Assets". "Pro Standard Assets" ...

  7. Unity3d 脚本相互调用

    unity中三种调用其他脚本函数的方法 第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名().很不实用…… 第二种,GameObject.Find("脚本所在物体名& ...

  8. Lua与C++相互调用

    {--1.环境--} 为了快速入手,使用了小巧快速的vc++6.0编译器 以及在官网下载了Lua安装包..官网地址{--http://10.21.210.18/seeyon/index.jsp--} ...

  9. 关于action script与js相互调用的Security Error问题

    大家都知道,as和js相互调用可以通过ExternalInterface.call和ExternalInterface.addCallback来进行. 比较好的做法是使用之前通过ExternalInt ...

随机推荐

  1. C# parser JSON get Key and value

    /*********************************************************************** * C# parser JSON get Key an ...

  2. java基础:eclipse编程不得不知道的技巧

    如果你是位具有开发经丰富的工程师,在开发的过程中,你就会很强烈的要求快捷的编程.如何快捷编程,只有更加熟悉开发工具.那么eclipse是同样也有很多技巧.可以带着下面问题来阅读1.如何查找类相关信息? ...

  3. andriod studio报错 Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration! Emulator: Process finished with exit code 1

    安装即可,再次运行svd,成功

  4. ldo的一些参数理解

    psrr是衡量ldo抑制外来信号噪声的能力,而内部噪声是由基准电压和误差放大器引入的.通常器件手册说的输出噪声指的就是内部噪声. ldo的暂态响应也是一个重要指标

  5. Tencent Server Web(TSW) 腾讯开源的nodejs 基础设施

      Tencent Server Web(TSW),是一套面向WEB前端开发者,以提升问题定位效率为初衷,提供染色抓包.全息日志和异常发现的Node.js基础设施.TSW关注业务的运维监控能力,适用于 ...

  6. openresty luarocks 安装以及openssl 问题处理

      1. 安装方式 wget https://luarocks.github.io/luarocks/releases/luarocks-2.4.3.tar.gz tar -xzvf luarocks ...

  7. luvcview,使用mplayer查看摄像头和luvcview保存YUV图像视频的播放(转)

    luvcview,使用mplayer查看摄像头和luvcview保存YUV图像视频的播放 在mplayer中查看摄像头,可使用如下命令:mplayer tv:// -tv driver=v4l2:in ...

  8. centos6.6安装SVN服务器(2015/3/7)

    一.安装#yum install subversion  判断是否安装成功  [root@]# svnserve --version有了SVN软件后还需要建立SVN库.#mkdir /opt/svn/ ...

  9. MySQL 性能优化技巧

    原文地址:MySQL 性能优化技巧 博客地址:http://www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这 ...

  10. C#修改系统环境变量,调用批处理bat

    一.设置环境变量 public void SetPath(string pathValue) { string pathlist; pathlist = Environment.GetEnvironm ...