**禾木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引用
演示**
usingmatlab呼叫c#更加簡單,先將c#**編譯成dll庫,matlab中直接引用即可呼叫。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();}}
}
如果失敗,注意檢查使用的.net版本是否過高,平台(x64/86)是否匹配等問題。
注意選擇release版本的dll(c#的bebug版本也可以引用,但c++的不行)。
**
namespace2、matlab操作matlabinte***ce
public
string msg
public
void
showmsg()}}
%呼叫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...