軟體:
Matlab R2012a 32 bit
VS2012 32 bit .Net 4.5
首先打開Matlab將以下程式碼貼上
Matlab Code:
function [ sum ] = getTotal( x,y ) sum = x + y; end
點擊File/New/Deployment Project
Name:可以隨便取,有關dll輸出檔案名稱以及類別的名稱
Type:選取.Net Assembly
輸入完按下ok
接著建立Class,以及按下Add Files
將剛寫好的.m檔案加入進來
接著找到該視窗,並按下紅色圈圈的小圖示
編譯時,需要等待一會
編譯完成就如下圖
有出現錯誤請檢查Code或檢查Project path的路徑是不是含有中文,如果Path內含中文看將Project改到英文Path底下
編譯完成後,在Project folder底下可以看到有出現兩個資料夾
src裡面有著Matlab Code轉譯到.Net的原始碼,內部也有dll
distrib裡面則只有dll和doc
接著開啓VS2012,並建立一個Project
將MWArray.dll和MyTest.dll加入參考
雖然MWArray.dll是.Net 2.0版本,而我開啟的專案是.Net 4.5不過還是可以使用的
接著將以下的程式碼貼上去就可以了
C#.Net Code:
using System; using System.Windows.Forms; using MyTest; using MathWorks.MATLAB.NET.Arrays; namespace MatlabTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Class1 class1 = new Class1(); MWNumericArray x = new MWNumericArray(10); MWNumericArray y = new MWNumericArray(20); label1.Text = class1.GetTotal(x, y).ToString(); } } }
執行前:
執行後:
當兩者在調用時速度有點慢,原因有可能是
- 我用VMware跑Windows 7並且在內部使用VS2012去Run, so...haha
- 調用的dll不是Native
- .Net版本不同,可能會有轉譯動作
- Matlab轉譯的功能可能沒有過度優化
- 早知道調用C的版本XD
- Matlab表示:用.Net土炮吧XD
- Matlab跟.Net的形態不一樣
- 在Matlab能執行不代表在.Net能使用
- 執行速度
參考資料:
http://wenku.baidu.com/view/77cf1e60f5335a8102d220e3.html
http://www.mathworks.com/help/matlab/matlab_prog/validate-number-of-function-arguments.html
http://blog.linmos.net/archives/564