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>"); 
        }
    }
}
相关文章
相关标签/搜索