C Matlab 相互呼叫

2021-07-15 19:05:20 字數 2831 閱讀 7476

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...