asp.net下調用Matlab產生動態連結程式庫

來源:互聯網
上載者:User

標籤:

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

  當然在實驗室同學的協助下,最後一個配置(asp.net+matlab)也最終成功通過了編譯,首先先轉一下實驗室同學所寫的配置方法,雖然我是按照他的方法進行配置,但是我們有自己的新問題

下面先轉他的部落格:http://user.qzone.qq.com/1033932438

 

然後我就記錄我是怎麼配置的:

1、安裝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_Yi

 

2、安裝好Matlab後,找到其安裝根路徑下的toolbox\compiler\deploy\win32,有個“MCRInstaller.exe”,安裝之。安裝過程直接傻瓜式的點確定。

 

3、開啟Matlab,在command window下輸入"mbuild -setup",然後如中展示的順序,敲入指令執行,來進行Matlab與編譯器的掛接。當最後那行中敲入“y”,斷行符號後,Matlab將串連你選擇的VS,成功後將出現隨後的中的介面。按照紅色劃線的來輸入。

 

 

4、然後在MATLAB主介面,File->new->development Project,就會出現介面,在Name輸入你的工程名字,然後在Target中選擇.NET Assembly,然後點OK。:

 

5、點了OK之後就會在MATLAB主介面的右邊看到新的工具列, 點擊Add class,輸入你想要的類名,然後在建立的類下點擊"add file",把你想要在C#中調用的M檔案加入進來。之後就會出現如情況:

在這裡需要你們肯定都要問如果我的m_3_read_sket_and_retrieve.m檔案調用了其他m檔案怎麼辦,那麼你就需要在下面這個視窗添加所有你在m_3_read_sket_and_retrieve.m檔案中所使用到的M檔案(包括Mex檔案),千萬千萬記住,你所有的m檔案都沒用使用過addpath函數,如果有使用到,請將其刪除。如果存在一個M檔案使用到了addpath函數,是會出錯的。

 

6、最後點擊上面這張中的build表徵圖(一個方塊上有3個指著它的箭頭),等待一段時間讓Matlab產生dll檔案,成功後將會,將會在你的工程目錄位置下產生一個檔案夾和一個.prj檔案。

 

7、在工程目錄下找到工程檔案夾,在工程檔案夾中將會看到兩個檔案夾,一個是distrib,另一個是src,src檔案夾裡面的檔案是一些c#檔案,將會指導你如何使用產生的類,而distrib檔案夾中才是我們所要的dll檔案。現在開啟VS,開啟你的工程,在工程屬性下添加兩個dll檔案,

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

 

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

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);

9、如果配置沒問題的話,就會看到結果了,上面講的代碼都是自己的代碼的一部分,下面給一個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>");         }    }}

  

asp.net下調用Matlab產生動態連結程式庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.