开心六月综合激情婷婷|欧美精品成人动漫二区|国产中文字幕综合色|亚洲人在线成视频

    1. 
      
        <b id="zqfy3"><legend id="zqfy3"><fieldset id="zqfy3"></fieldset></legend></b>
          <ul id="zqfy3"></ul>
          <blockquote id="zqfy3"><strong id="zqfy3"><dfn id="zqfy3"></dfn></strong></blockquote>
          <blockquote id="zqfy3"><legend id="zqfy3"></legend></blockquote>
          打開APP
          userphoto
          未登錄

          開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

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

           另一種混合編程方式——NET組件,利用m文件生成dll再由C#調(diào)用。.NET組件較之引擎的優(yōu)點(diǎn)是可移植型較好,目標(biāo)機(jī)不需要安裝Matlab,只需要安裝MCRinstaller.exedll的注冊,缺點(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中配置分別配置>>mbuildsetup>>mexsetup.

          編譯器均選擇 VS2013

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

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

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

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




          3.環(huán)境安裝及dll注冊

          需要安裝MCRinstaller.exe(本機(jī)則不需要),它所在的位置是:C:\ProgramFiles\MATLAB\R2013a\toolbox\compiler\deploy\win64;

          在路徑C:\ProgramFiles\MATLAB\R2013a\bin\win64里,對mwcomutil.dll進(jìn)行注冊(這個(gè)dllmatlab下作的任何com組件都要用到的dll),下面我們在其他編譯器下調(diào)用時(shí)就可以用了。regsvr32mwcomutil.dll

          問題:提示錯(cuò)誤為注冊dll模塊的原因(Error:DllRegisterServer in E:\Matlab2010b\bin\test\src\test_1_0.dllfailed

          解決:點(diǎn)“開始”->Windows系統(tǒng)”->“命令提示符”右鍵“以管理員身份運(yùn)行”,在cmd中輸入regsvr32mwcomutil.dll 。這樣應(yīng)該就可以了。

          4.dll引用

          C:\ProgramFiles\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(objectsenderEventArgs e)

                 {

                     Class1 myhello = new Class1();

                     MWArray i = 3;

                     MWArray result;

                     result = myhello.myplus(i);

                     label1.Text = result.ToString();

                 }

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

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

           

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



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

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

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



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



          本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
          打開APP,閱讀全文并永久保存 查看更多類似文章
          猜你喜歡
          類似文章
          C#調(diào)用Matlab 生成的com組件,生成com 時(shí)錯(cuò)誤的解決
          Matlab生成Com組件,vb、vc等的調(diào)用! - flider的日志 - 網(wǎng)易博客
          C#與Matlab混合編程_入門
          matlab函數(shù)編譯成dll供Cpp調(diào)用的方法
          VS2008中C#調(diào)用Matlab生成的DLL文件
          C# 調(diào)用 Matlab
          更多類似文章 >>
          生活服務(wù)
          分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
          綁定賬號成功
          后續(xù)可登錄賬號暢享VIP特權(quán)!
          如果VIP功能使用有故障,
          可點(diǎn)擊這里聯(lián)系客服!

          聯(lián)系客服