asp.net下調用Matlab生成動態連接庫

  對於此次論文項目,最後在寫一篇關於工程的博客,那就是在asp.net下調用matlab生成的dll動態連接庫。至今關於matlab,c/c++(opencv),c#(asp.net)我總共寫了4篇配置的博客,配置問題搞了咱們差很少2周多的時間,各類編譯不經過,各類連接出問題,各類頭疼,甚至都有放棄asp.net下建工程,轉用matlab的gui來實現前端界面的念頭了。可是在隊友的強烈要求下,我不得不硬着頭皮搞下這配置問題,最終總結出這4篇配置博客。其中艱辛,恐怕連隊友都不甚瞭解。前端

  固然在實驗室同窗的幫助下,最後一個配置(asp.net+matlab)也最終成功經過了編譯,首先先轉一下實驗室同窗所寫的配置方法,雖然我是按照他的方法進行配置,可是咱們有本身的新問題c++

下面先轉他的博客:http://user.qzone.qq.com/1033932438c#


而後我就記錄我是怎麼配置的:asp.net

一、安裝Matlab,我安裝的Matlab版本那是2012a,記得千萬要安裝32位的Matlab版本,以前我也是安裝64位的matlab結果,vs2010的ASP.NET Development Server懷疑不支持64位的,因此雖然編譯能經過,可是在網頁中顯示就會出錯。不過神奇的是,我嘗試過不少配置結果曾經在win7+IIS下可以成功運行64位Matlab編譯出的dll文件(有心人能夠試試)。一樣的我從同窗那拷貝一個安裝matlab32位的連接:http://wenku.baidu.com/link?url=52lt-eO7dnNf5XEvjbNWybs3qJV4npd0MBhEdJi75ziqXyI-Oyk-EvwXlGMMQSF-Y9J1vcOqW4jusOgAE8Jjkll7T63JYIR6GZE1USYB_Yiide


 二、安裝好Matlab後,找到其安裝根路徑下的toolbox\compiler\deploy\win32,有個「MCRInstaller.exe」,安裝之。安裝過程直接傻瓜式的點肯定。函數


 三、打開Matlab,在command window下輸入"mbuild -setup",而後以下圖中展現的順序,敲入指令執行,來進行Matlab與編譯器的掛接。當最後那行中敲入「y」,回車後,Matlab將鏈接你選擇的VS,成功後將出現隨後的截圖中的界面。按照紅色劃線的來輸入。工具

 


 四、而後在MATLAB主界面,File->new->development Project,就會出現如圖界面,在Name輸入你的工程名字,而後在Target中選擇.NET Assembly,而後點OK。如圖所示:ui


 五、點了OK以後就會在MATLAB主界面的右邊看到新的工具欄, 點擊Add class,輸入你想要的類名,而後在新建的類下點擊"add file",把你想要在C#中調用的M文件加入進來。以後就會出現以下圖狀況:url

在這裏須要大家確定都要問若是個人m_3_read_sket_and_retrieve.m文件調用了其餘m文件怎麼辦,那麼你就須要在下面這個窗口添加全部你在m_3_read_sket_and_retrieve.m文件中所使用到的M文件(包括Mex文件),千萬千萬記住,你全部的m文件都沒用使用過addpath函數,若是有使用到,請將其刪除。若是存在一個M文件使用到了addpath函數,是會出錯的。如圖:spa


 六、最後點擊上面這張截圖中的build圖標(一個方塊上有3個指着它的箭頭),等待一段時間讓Matlab生成dll文件,成功後將會如圖所示,將會在你的工程目錄位置下生成一個文件夾和一個.prj文件。


 七、在工程目錄下找到工程文件夾,在工程文件夾中將會看到兩個文件夾,一個是distrib,另外一個是src,src文件夾裏面的文件是一些c#文件,將會指導你如何使用生成的類,而distrib文件夾中才是咱們所要的dll文件。如今打開VS,打開你的工程,在工程屬性下添加兩個dll文件,如圖

其中MWArray可以在Matlab安裝目錄下找到,個人路徑是E:\Program Files (x86)\MATLAB\R2012a\toolbox\dotnetbuilder\bin\win32\v2.0。


 八、添加引用成功後,就開始寫代碼了在開頭加入這三行:

using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using CS_Online;

而後在使用時,以下圖這樣調用:

MWNumericArray frontSket = new MWNumericArray(frontDrawDataArray);
MWNumericArray sideSket = new MWNumericArray(sideDrawDataArray);
MWNumericArray topSket = new MWNumericArray(topDrawDataArray);

CSRetrieval csr = new CSRetrieval();
csr.M_3_read_sket_and_retrieve(frontSket, sideSket, topSket);

九、若是配置沒問題的話,就會看到結果了,上面講的代碼都是本身的代碼的一部分,下面給一個demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using csdemon;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            double[,] array2D1 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
            double[,] array2D2 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
            double[,] array2D3 = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
            MWNumericArray a1 = new MWNumericArray(array2D1);
            MWNumericArray a2 = new MWNumericArray(array2D2);
            MWNumericArray a3 = new MWNumericArray(array2D3);
            myMathClass myMathDemon = new myMathClass();

            MWArray result = myMathDemon.addm(a1, a2);
            MWNumericArray r = (MWNumericArray)result;
            double[,] location = (double[,])r.ToArray();
            string str = "";
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    str += location[i, j];
                    str += " ";
                }
            }
            Response.Write("<script>alert('" + str + "')</script>"); 
        }
    }
}
相關文章
相關標籤/搜索