在C#的Web项目中调用Matlab代码的方法

为了毕设的图形检索方向的研究,本人需要在信科的师兄师姐们已经完成的C#界面中,调用现在研究的算法的Matlab代码,以便看到实验的效果。前段时间已经拖延了1个多月,一方面因为实习越来越多事情,时间减少了很多;但更重要在于C#调用Matlab的方法真心麻烦,C#的Web项目中进行这个操作貌似会碰到更多细节上的问题。而且总是很不稳定,操作系统、Matlab或VS的版本、遗漏一些文件或步骤都会造成失败!这个问题本人已经搞了很长时间,直至前几天,在同学的帮助下,自己再弄一遍,总算成功了!下面我及时把这个过程记录下来,以免自己下次又忘记而重复劳动,如果能给有需要的人以参考,就更好了!

1、安装Matlab,我的版本是2010b,安装的教程网上有,我这里可以给个链接:http://wenku.baidu.com/link?url=52lt-eO7dnNf5XEvjbNWybs3qJV4npd0MBhEdJi75ziqXyI-Oyk-EvwXlGMMQSF-Y9J1vcOqW4jusOgAE8Jjkll7T63JYIR6GZE1USYB_Yi,相信大家按照上面的步骤做能很容易安装好。不过这里千万千万注意:要安装32位的!我之前就是因为装了64位的,导致在网上找了大量其它分享,已经严格按照它们所说的步骤做了,最后都还是遇到VS里头调用Matlab代码出现的初始化异常!

2、安装好Matlab后,找到其安装根路径下的toolbox\compiler\deploy\win32,有个“MCRInstaller.exe”,安装之。安装过程灰详简单,相信大家完全能搞定。装完之后,大家检查一下系统环境变量里头(右键“计算机”→属性→高级→环境变量→系统变量),“path”是否新增了“root\vx\runtime\win32”这个值(其中,“root”是指MCRInstaller安装根路径,“vx”中的x是个数,有的地方80,有的为714之类,不固定),没有的话加上就可以了。

3、安装Microsoft Visual Studio,我装的是2010。在这里提明一下,有可能之前我是因为Matlab装了64位的原因而导致一直失败,然后误以为是Matlab和VS版本不对造成,如果情况真是这样未免显得太蛋疼,完全不符合软件工程应有的精神理念。我觉得大Matlab和大VS应该不至于会这样。大家不妨试试其它版本的Matlab与VS看看,如果也能成功的话请及时联系我。VS的安装也是走流程,此处不再赘述。

4、 打开Matlab,在工作区敲入指令“mbuild -setup”,回车。接着,按照如下图中展示的顺序,敲入指令执行,来进行Matlab与编译器的挂接。当最后那行中敲入“y”,回车后,Matlab将连接你选择的VS,成功后将出现随后的截图中的界面。

5、上述步骤都是在一开始你的电脑没有Matlab、VS、Matlab与VS木有相连的状态下才需要执行的。执行过这一次后,以后就不需要再走这些步骤了。接下来,自己随便写份Matlab代码,我写的是个简单到爆的函数如下图,写完后保存。

6、在Matlab主界面,File→New→Development Project,出现如下界面,以把你的Matlab封装成Web工程。在“Name”中输入你自己想要的工程名,“Location”中选择好保存路径,“Target”中选择“.NET Assembly”,然后“OK”。

7、在Matlab主界面的右边将出现新的工具栏。点击“Add class”,输入你想要的类名,然后在新建的类下点击“Add files”,把你上面保存的那份Matlab代码引进来。出现如下结果,表示你封装的工程(我的为“TestMatlab”)里有个你定义的类(我的为“TestMatlabClass”),该类有个成员方法(我的为“mySum”,它就是我上面自定义的那个Matlab代码的文件名,该Matlab代码应该要写成函数形式,文件名与函数名一致)。“Add files”可以添加多份Matlab代码(只要它们都是函数形式),也可以多次“Add
class”以创建多个类。如果你创建的这个的工程内需要用到其它资源(比如说,你刚添加的Matlab文件里调用到了其它的Matlab文件中的代码),可以通过该界面下方的“Add files/directories”,把相应的文件甚至文件夹都添加进来。

8、然后点击上面这张截图中的build图标(一个方块上有3个指着它的箭头),等待一段时间让Matlab生成Web工程,成功后如下所示。而且,在你选好的生成工程的目录位置下,会出现一个文件夹和一个.prj文件(我的为“TestMatlab.prj”与“TestMatlab”文件夹)。

9、打开VS,文件→新建→项目,出现如下界面。然后,其它语言→Visual C#→Web→ASP.NET 空 Web应用程序,在下面的名称处写上你想要的C# Web项目名(我的为“TestCS”),在位置上选择你想把该项目保存到的位置,确定。

10、新建了C# Web项目后将出现如下图中的界面,在TestCS项目目录下,有“Properties”、“引用”、“Web.config”这3个目录。右击“引用”→添加引用→浏览,然后分别找到:Matlab安装根目录下的toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll、你所创建的Matlab封装工程目录下的(我的为“TestMatlab”文件夹)\distrib中的与封装工程名同名的.dll文件(我的为“TestMatlab.dll”)。把这两份.dll引进来之后,如下界面的“引用”一栏出现了新增的“MWArray”与“TestMatlab”。

11、右击上述界面的“TestCS”根目录→添加→新建项,出现如下界面。Visual C#→Web→Web 窗体,输入你要创建的Web界面的名称(我的为“TestPage”),添加。该步将创建一个ASP页面,作为TestCS的表现层。

12、此后,在项目目录下将新增目录“TestPage.aspx”,其下有两个文件:“TestPage.aspx.cs”与“TestPage.aspx.designer.cs”,如下图。后者暂时不用管,前者则是充当“TestPage.aspx”的后台,主要用于定义处理来自表现层事件的处理器,用C#实现。分别双击“TestPage.aspx”与“TestPage.aspx.cs”,并在打开的该两者内分别填入如下两幅截图里的代码。

13、激动人心的一刻要来了!写完代码后,按下VS的调试按钮。如果一切顺利,将自动启动浏览器并创建新页面,页面内将出现如下图,点一下“Go”,会显示“3”这个结果(我的“TestPage.aspx.cs”中让a为1,b为2,然后a与b传入了“mySum”方法,执行加法得到就是3)。至此,大功告成!

由于精力和篇幅有限,上述代码就不解释了,读者应该可以大概看得明白思路。另外,本文中有些地方的原理性介绍可能有些缺乏,本人以后再顺其自然补充……最后,需要提明的是,此处以在C#的Web项目下调用Matlab代码为内容讨论,如果能成功弄好上述,C#的普通项目下调用Matlab代码也就不在话下了,读者可以自行尝试一下。

时间: 2024-10-13 02:02:28

在C#的Web项目中调用Matlab代码的方法的相关文章

Java Web项目中的经典代码抽取

前言: 众所周知的,项目开发中做得最多的无非就是增删查改(CRUD)操作.自从国内Web项目开发渐渐盛行SSH框架之后,其开发开发流程也变得更加灵活:本文就项目开发中的业务层代码作个简单的抽取,供业内朋友参考. 代码抽取原理图如下: 这个图主要展示开发中的2个业务,账号(Account)管理跟类别(Category)管理,具体代码实现比较简单就不附上了.从上面的UML图中我们只需要抽象出BaseService接口并且实现BaseServiceImpl类,其他业务的实现一概继承BaseServic

web项目中的跨域问题解决方法

一种是JSONP 一种是 CORS. 在客户端Javascript调用服务端接口的时候,如果需要支持跨域的话,需要服务端支持. JSONP的方式就是服务端对返回的值进行回调函数包装,他的优点是支持众多的浏览器, 缺点是仅支持Get的方式对服务端请求. 另一种主流的跨域方案是CORS,他仅需要服务端在返回数据的时候在相应头中加入标识信息.这种方式非常简便.唯一的缺点是需要浏览器的支持,一些较老的浏览器可能不支持CORS特性. 跨域支持是创建WebService时应该考虑的一个功能点,文中是使用Se

Windows、Linux、Web安装及调用Matlab程序完整说明(大章)

本文档详细说明了Linux下Web项目调用Matlab函数的完整操作,文章适合对Java.Linux有一定基础了解的人群(不了解也没什么,无非是多试几次).因Linux作为服务器,所以未在其上安装Matlab主程序,只安装了运行环境MCR. 本文档内所述的所有版本软件均以32位为准,JDK与MCR也使用32位.若你的系统为64位,Linux系统同样为64位,则请尽量选择使用64位版本的JDK与MCR. 由于Matlab的版本限制问题,请保证Matlab主程序和MATLABCompiler Run

Java中调用MatLab返回值

当在Java中使用MatLab函数时,由于语言语法的不同,Matlab返回多个数据时,想在Java中获取到并进行使用.查阅了网上资料,翻箱倒柜加上自己实战,得出方法如下: 如MatLab函数返回的是N个变量值,其中有单个的数值.一维数组.二维数组等. 在Java中,使用Object[] rs=cmatlab.matlabfun(n , ....);接受返回的参数.其中rs[k]代表返回列表中第k个返回的变量的值. 如果rs[k]是单个数值,比如Double型.则使用下面的方法转换为Java中的D

06_在web项目中集成Spring

在web项目中集成Spring 一.使用Servlet进行集成测试 1.直接在Servlet 加载Spring 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); HelloService helloService = (HelloService) applicationContext.getBean("helloS

Java 容器在实际web项目中应用

前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用法.可结合图片代码了解Java中的容器 备注 :这个地方 ,参考于朝向远方的博客Java容器详解,既然前人总结的这么好,我就直接拿来用,在这里更注重在实际开发中的例子,感谢那些总结的前辈们,辛苦了. 简单的数组例子 Thinking in Java 中并没有把数组归为Java的容器,实际上数组的确不是Java

JAVA WEB项目中各种路径的获取

JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获取web项目的全路径 例如 :E:\eclipseM9\workspace\tree\ tree是我web项目的根目录 2.你也可以随时在任意的cla

在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式,虽然Web API或者WCF方式的调用,相对直接连接数据库方式,响应效率上略差一些,不过扩展性强,也可以调动更多的设备接入,包括移动应用接入,网站接入,Winfrom客户端接入,这样可以使得服务逻辑相对独立,负责提供接口即可.这种方式中最有代表性的就是当前Web API的广泛应用,促进了各个接入端

编写高质量代码改善java程序的151个建议——[110-117]异常及Web项目中异常处理

原创地址:http://www.cnblogs.com/Alandre/(泥沙砖瓦浆木匠),需要转载的,保留下! 文章宗旨:Talk is cheap show me the code. 大成若缺,其用不弊.大盈若冲,其用不穷.  <道德经-老子>最完满的东西,好似有残缺一样,但它的作用永远不会衰竭:最充盈的东西,好似是空虚一样,但是它的作用是不会穷尽的 Written In The Font 摘要: 异常处理概述 学习内容: 建议110: 提倡异常封装 建议111: 采用异常链传递异常 建议