1、C#調用matlab程式方法
步驟一:在MATLAB中建一個m檔案(test.m)
***注意,.m檔案名随意,function函數名随意***
該程式用于模拟生成雷克子波,并繪圖,代碼如下:
function test()
f=250;
ts=0.4502/f;
T=ts;
number=100;
t=-number/2:1:number/2;
a=(1-2*(pi*f*t*T).^2).*exp(-(pi*f*t*T).^2);
plot(t,a);
步驟二:生成dll動态連結庫
在MATLAB R2014a中輸入deploytool指令,
選擇“Library Compiler”,打開動态連結庫編譯器
1、 在“applicationtype”中選擇要生成的連結庫類型。 選擇“.NET Assembly”
2、 在“exportedfunctions”中選擇,函數所在的.m檔案,即我們剛剛建立的test.m檔案。
3、 為該類名起一個見名知意的名字,如ricker,預設為class1.
4、 點選右上角對号.
5、 開始編譯
此時顯示成功。生成成功後會自動打開生成檔案所在路徑
打開“…..noly”檔案,如下,我們隻需要第一個dll檔案。建立.net程式時,引用該dll即可
步驟三:C#程式中調用MATLAB程式(dll)
1、建立一個 windows窗體應用程式
2、"引用"右擊,選擇浏覽,找到test.dll,添加。
"引用"右擊,選擇浏覽,找到MWArray.dll(matlab安裝路徑\toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll),添加
3、在界面添加一個button按鈕,在這個按鈕的點選事件中調用dll中的函數。
private voidbutton1_Click(object sender, EventArgs e)
{
//new一個test類
test.Ricker st = new test.Ricker();
st.test();//調用matlab中的定義的function
}
步驟四:實作效果
點選button按鈕
2、使用deploytool指令打開compiler面闆
生成dll時,會出現如下圖所示錯誤
原因是matlab未完全破解,2014a的破解辦法:
http://pan.baidu.com/s/1qWFbOjq,提取碼84rg ,下載下傳後解壓,把“..\Matlab64\bin\win64”目錄下的compiler.dll,mcc.exe,libmwservices.dll 三個檔案複制到matlab安裝目錄對應位置替換原檔案即可!(如果軟體是32位,則對應目錄為“..\Matlab32\bin\win32”)
3、常見問題
MathWorks.MATLAB.NET.Arrays.MWNumericArray"的類型初始值設定項引發異常
我在自己的電腦上(x86)上運作沒有問題,我程式放到一台(x64)電腦上運作出錯,如上。解決辦法将項目平台改為(x64即可)。當然64位系統上也安裝了matlab。
一般而言出現上述異常,都是平台不相容導緻的。
轉自:https://blog.csdn.net/fxm720505/article/details/51382547