c# 调matlab传字符串_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.^2;
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 ={{1},{2},{3},{4}}; //列向量
MWArray array = new MWNumericArray(list);
CalcMatResultNative.Multiply multi = new Multiply();
object resultObj = multi.GetSelfMultiplyResult(3, array);// 3 表示返回的結果數量,要小于等于matlab對應函數實際的返回值數量
object[] resultObjs = (object[]) resultObj;
double[,] calcResult = (double[,])resultObjs[0];
double[,] sizem = (double[,])resultObjs[1];
double[,] sizen = (double[,])resultObjs[2];
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 相互调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sftp 中文乱码 连接后_sftp服务
- 下一篇: picsart旧版本_PicsArt历史