C Matlab 相互呼叫

2021-09-22 07:23:25 字數 3062 閱讀 9163

**禾木junjie原文c# matlab 相互呼叫

visualstudio2013 / .net4.0 

matlab2015b

高版本的matlab對外置其它語言做得很方便了,並不需要一堆的配置。 

其它語言與matlab的互動操作也類似。

基本思路:將matlab函式打包成dll檔案,聯合matlab資料支援dll(mwarray.dll),交付給其它語言程式使用。

1、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等軟體直接搜尋。

c#端用到的就是 mwarray.dll 和 calcmatresultnative.dll 這兩個dll檔案。

新增dll引用 

演示**

using

system;

using calcmatresultnative; //

新增引用

using mathworks.matlab.net.arrays; //

新增引用

namespace

csharpmatlabdemo

,,,}; //

列向量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#更加簡單,先將c#**編譯成dll庫,matlab中直接引用即可呼叫。

如果失敗,注意檢查使用的.net版本是否過高,平台(x64/86)是否匹配等問題。 

注意選擇release版本的dll(c#的bebug版本也可以引用,但c++的不行)。

**

namespace

matlabinte***ce

public

string msg

public

void

showmsg()}}

2、matlab操作

%呼叫c# dll

%引用絕對路徑

net.addassembly(

'r:\users\grassphy\desktop\matlabcsharpdemo\matlabinte***ce.dll');

%靜態方法呼叫

select = matlabinte***ce.dialog.showselectmsg('

請選擇...

','提示');

ifselect

disp(

'yes');

else

disp('no

');end%成員方法呼叫

dialog =matlabinte***ce.dialog();

dialog.msg = '

提示資訊';

dialog.showmsg();

參考: 

c#中使用matlab

沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的框架所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如別人所關心你的。理想的騰飛與實現,沒有別人的支援與幫助,是萬萬不能的。

C Matlab 相互呼叫

visualstudio2013 net4.0 matlab2015b 高版本的matlab對外置其它語言做得很方便了,並不需要一堆的配置。其它語言與matlab的互動操作也類似。基本思路 將matlab函式打包成dll檔案,聯合matlab資料支援dll mwarray.dll 交付給其它語言程式...

lua和c 相互呼叫

include include include include include extern c lua state l int luaadd lua state l,int x,int y extern int cl domylua lua state l extern int cl drawte...

Flex與Javascript相互呼叫

用flash cs3開發,或者在flex裡建立as專案開發,與flex裡建立flex專案開發,在對於呼叫外部的問題,比如externalinte ce類這個命令 結果一樣嗎?答案是不一樣,這是個很奇怪的問題,其實是源於flex在建立的時候內部包含的東西很多,還加了個框架,如果你按照flash cs3...