|
另一種混合編程方式——NET組件,利用m文件生成dll再由C#調(diào)用。.NET組件較之引擎的優(yōu)點(diǎn)是可移植型較好,目標(biāo)機(jī)不需要安裝Matlab,只需要安裝MCRinstaller.exe及dll的注冊(cè),缺點(diǎn)是配置較為復(fù)雜,受各種版本的影響。遇到一大圈的問題,最可能的原因是VS2013版本比較新,但最后還是一個(gè)個(gè)問題克服,正所謂,柳暗花明又一村。
配置環(huán)境:vs2013(64位)+Matlab2013a(64位)+win8.1(64位) 1.定義Matlab文件,myplus.m
function
[s] % calculate the sum of 1..n s = 0; for i = 1:n
end 2.Matlab編譯器設(shè)置 在command window中配置分別配置>>mbuild –setup和>>mex –setup. 編譯器均選擇 VS2013 問題:matlab在關(guān)聯(lián)編譯器的時(shí)候,會(huì)出現(xiàn)找不到編譯器的問題 原因:matlab要找windows sdk的mt.exe,找不到報(bào)錯(cuò)的.因?yàn)?/span>vs2013在安裝時(shí),windows sdk的mt.exe位置變了,而matlab還是按照老的路徑找,肯定找不到(原來在windows sdks下面,現(xiàn)在在windows kits下面). 解決:網(wǎng)上找到相應(yīng)文件,將mbuildopts和mexopts兩個(gè)文件夾復(fù)制到 (matlabroot)\bin\win64 下,(matlabroot)是matlab的安裝目錄 在command window中>> deploytool。先創(chuàng)建project,選擇.NET Assembly類型;然后把myplus.m文件添加到project里面,然后點(diǎn)上面菜單條上的build the project
3.環(huán)境安裝及dll注冊(cè) 需要安裝MCRinstaller.exe(本機(jī)則不需要),它所在的位置是:C:\Program Files\MATLAB\R2013a\toolbox\compiler\deploy\win64; 在路徑C:\Program Files\MATLAB\R2013a\bin\win64里,對(duì)mwcomutil.dll進(jìn)行注冊(cè)(這個(gè)dll是matlab下作的任何com組件都要用到的dll),下面我們?cè)谄渌幾g器下調(diào)用時(shí)就可以用了。regsvr32 mwcomutil.dll 問題:提示錯(cuò)誤為注冊(cè)dll模塊的原因(Error: DllRegisterServer in E:\Matlab2010b\bin\test\src\test_1_0.dll failed) 解決:點(diǎn)“開始”->“Windows系統(tǒng)”->“命令提示符”右鍵“以管理員身份運(yùn)行”,在cmd中輸入regsvr32 mwcomutil.dll 。這樣應(yīng)該就可以了。 4.dll引用 從C:\Program Files\MATLAB\R2013a\toolbox\dotnetbuilder\bin\win64\v2.0復(fù)制出MWArray.dll到debug目錄下,從HelloNet\distrib里的HelloNet.dll復(fù)制到debug目錄下。然后添加引用,瀏覽debug目錄。 5.在c#中簡單做一個(gè)windowsapplication 程序中需要引用的命名空間有: using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility; using dlldemo; 在按鈕事件里的代碼是: private void button1_Click(object sender, EventArgs e)
問題:C#在調(diào)用dll初始化matlab生成的類時(shí),總是提示:typeInitialization exception類型初始化設(shè)定異常,網(wǎng)上找了好久,試了個(gè)各種解決方法 解決:原來是在build dll時(shí),選擇的.m文件的所在路徑不能包含中文/空格,我把.m文件直接移到了根目錄下的某個(gè)不含空格和中文的文件夾下,然后把在這個(gè)文件夾下的.m文件拖到myTest.prj中,build,VS中重新引用生成的新的dll,發(fā)現(xiàn)程序正確。
問題:在整個(gè)過程中,運(yùn)行程序還是會(huì)出現(xiàn)問題,Matlab不能工作,如圖:
原因:.NET版本的問題,及調(diào)試的問題 解決:將.NET設(shè)置成4.0及其以下, 同時(shí),將調(diào)試中的啟用Visual Studio 承載進(jìn)程取消掉,如下圖 最后的最后,終于有結(jié)果了!激動(dòng)人心啊~
|
|
|