小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Matlab混合編程之NET組件(C#篇)

 imelee 2017-09-20

 另一種混合編程方式——NET組件,利用m文件生成dll再由C#調(diào)用。.NET組件較之引擎的優(yōu)點(diǎn)是可移植型較好,目標(biāo)機(jī)不需要安裝Matlab,只需要安裝MCRinstaller.exedll的注冊(cè),缺點(diǎn)是配置較為復(fù)雜,受各種版本的影響。遇到一大圈的問題,最可能的原因是VS2013版本比較新,但最后還是一個(gè)個(gè)問題克服,正所謂,柳暗花明又一村。

配置環(huán)境:vs2013(64位)+Matlab2013a(64位)+win8.1(64位)
    以Matlab安裝路徑:C:\Program Files\MATLAB\R2013a為例

 

1.定義Matlab文件,myplus.m

function [s]  = myplus( n )

% calculate the sum of 1..n

s = 0;

for i = 1:n

    s = s + i;

end

2.Matlab編譯器設(shè)置

command window中配置分別配置>>mbuild setup>>mex setup.

編譯器均選擇 VS2013

問題:matlab在關(guān)聯(lián)編譯器的時(shí)候,會(huì)出現(xiàn)找不到編譯器的問題

原因:matlab要找windows sdkmt.exe,找不到報(bào)錯(cuò)的.因?yàn)?/span>vs2013在安裝時(shí),windows sdkmt.exe位置變了,而matlab還是按照老的路徑找,肯定找不到(原來在windows sdks下面,現(xiàn)在在windows kits下面).

解決:網(wǎng)上找到相應(yīng)文件,將mbuildoptsmexopts兩個(gè)文件夾復(fù)制到 (matlabroot)\bin\win64 下,(matlabroot)matlab的安裝目錄

command window>> deploytool。先創(chuàng)建project,選擇.NET Assembly類型;然后把myplus.m文件添加到project里面,然后點(diǎn)上面菜單條上的build the project

Matlab混合編程之NET組件(C#篇)


Matlab混合編程之NET組件(C#篇)



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è)dllmatlab下作的任何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.dlldebug目錄下,從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)

        {

            Class1 myhello = new Class1();

            MWArray i = 3;

            MWArray result;

            result = myhello.myplus(i);

            label1.Text = result.ToString();

        }

問題:C#在調(diào)用dll初始化matlab生成的類時(shí),總是提示:typeInitialization exception類型初始化設(shè)定異常,網(wǎng)上找了好久,試了個(gè)各種解決方法

解決:原來是在build dll時(shí),選擇的.m文件的所在路徑不能包含中文/空格,我把.m文件直接移到了根目錄下的某個(gè)不含空格和中文的文件夾下,然后把在這個(gè)文件夾下的.m文件拖到myTest.prj中,buildVS中重新引用生成的新的dll,發(fā)現(xiàn)程序正確。

 

問題:在整個(gè)過程中,運(yùn)行程序還是會(huì)出現(xiàn)問題,Matlab不能工作,如圖:

Matlab混合編程之NET組件(C#篇)



原因:.NET版本的問題,及調(diào)試的問題

解決:.NET設(shè)置成4.0及其以下,

Matlab混合編程之NET組件(C#篇)

同時(shí),將調(diào)試中的啟用Visual Studio 承載進(jìn)程取消掉,如下圖

Matlab混合編程之NET組件(C#篇)

最后的最后,終于有結(jié)果了!激動(dòng)人心啊~

Matlab混合編程之NET組件(C#篇)



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多