为了毕设的图形检索方向的研究,本人需要在信科的师兄师姐们已经完成的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代码也就不在话下了,读者可以自行尝试一下。