visualstudio2013 / .net4.0
matlab2015b
高版本的matlab對外置其它語言做得很方便了,並不需要一堆的配置。
其它語言與matlab的互動操作也類似。
基本思路:將matlab函式打包成dll檔案,聯合matlab資料支援dll(mwarray.dll),交付給其它語言程式使用。
編寫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)重新命名庫名稱。
重新命名類名稱,或者新增類,分配函式所屬類。完成打包操作。
匯出dll
在生成的檔案中,找到「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()}}
% 呼叫c# dll
% 引用絕對路徑
net.addassembly('r:\users\grassphy\desktop\matlabcsharpdemo\matlabinte***ce.dll');
% 靜態方法呼叫
select = matlabinte***ce.
dialog.showselectmsg('請選擇...','提示');
if select
disp('yes');
else
disp('no');
end% 成員方法呼叫
dialog = matlabinte***ce.dialog();
dialog.msg = '提示資訊';
dialog.showmsg();
參考:
c#中使用matlab
C Matlab 相互呼叫
禾木junjie原文c matlab 相互呼叫 visualstudio2013 net4.0 matlab2015b 高版本的matlab對外置其它語言做得很方便了,並不需要一堆的配置。其它語言與matlab的互動操作也類似。基本思路 將matlab函式打包成dll檔案,聯合matlab資料支援d...
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...