2014/10/14

C#.Net 調用Matlab

系統:Windows 7 32 bit
軟體:
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();
        }
    }
}


執行前:


執行後:

當兩者在調用時速度有點慢,原因有可能是

  1. 我用VMware跑Windows 7並且在內部使用VS2012去Run, so...haha
  2. 調用的dll不是Native
  3. .Net版本不同,可能會有轉譯動作
  4. Matlab轉譯的功能可能沒有過度優化
  5. 早知道調用C的版本XD
  6. Matlab表示:用.Net土炮吧XD
要注意的幾點如下:

  1. Matlab跟.Net的形態不一樣
  2. 在Matlab能執行不代表在.Net能使用
  3. 執行速度


參考資料:
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