对于这次论文项目,最后在写一篇关于工程的博客,那就是在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生成动态链接库的更多相关文章
-
c++调用matlab生成的Dll动态连接库
点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台: matlab 7.0(R ...
-
C#调用Matlab生成的Dll
问题描述:最近开发需要调用matlab生成的DLL,在New MWNumericArray 对象的时候报错,提示未将对象引用到对象的实例. 问题分析:因为MWArray.dll是Matlab提供的DL ...
-
C/C++下调用matlab函数操作说明
1.matlab的安装 连接:http://pan.baidu.com/s/1qXuF7aO 安装32位版本的matlab(在目录下bin文件夹中有两个文件夹,选择win32文件夹下的setup进行安 ...
-
java调用matlab生成exe文件
一.Matlab生成Java Package 1.在MATLAB的Command Window输入deploytool命令,选择Library Compiler. 2.在弹出的窗口选择Java Pac ...
-
Matlab生成动态链接库供C#调用
1.首先在Matlab中编写一个或几个.m文件 2.然后在命令空间中输入命令:deploytool 3.修改工程名称,修改需要生成文件后缀 4.添加类,添加文件,然后点击生成.
-
C#调用Matlab生成的dll方法
其实整个过程比较简单,但是需要心细一点. 需要的工具:VS2005及以上版本,MATLAB2008B及以上版本,另外非常重要的需要安装一个MATLAB Compiler Runtime,这个文件(MC ...
-
.net 调用 Matlab生成dll出现的问题(The type initializer for &#39;MathWorks​.MATLAB.NE​T.Utility.​MWMCR&#39; threw an exception.)
https://cn.mathworks.com/matlabcentral/answers/278399-i-get-an-error-saying-the-type-initializer-for ...
-
ASP.NET下调用ffmpeg与mencoder实现视频转换截屏
最近要做一个视频播放的系统,用到了ffmpeg和mencoder两个工具,查了一些资料,发现这方面的资料还挺多的,但是就是乱了一点,我自己从头整理了一下,和大家分享一下: 1.ffmpeg实现视频(a ...
-
VS2008 C++ 调用MATLAB 2009b 生成的DLL .
转载: 刚开始学习用VC++调用matlab生成的DLL,找了网上一些资料,难以找到vs2008与MATLAB2009b版本的,按照以往版本做的总是有很多错误.经过两天努力,终于调试成功,这里将经验总 ...
随机推荐
-
如何使用VIM的Help
很多时候在用到vim的命令的时候,都会去网上搜索,殊不知,如果熟练使用VIM的help,可以达到事半功倍的效果. 下面介绍如何使用VIM的help: 1. 在vim的一般模式中输入:help ...
-
AndroidUI 布局动画-为布局添加动画
除了可以为视图添加动画以外,还可以为视图的布局添加动画: <RelativeLayout xmlns:android="http://schemas.android.com/apk/r ...
-
Unity性能优化的N种武器
贴图: l 控制贴图大小,尽量不要超过 1024 x1024: l 尽量使用2的n次幂大小的贴图,否则GfxDriver里会有2份贴图: l 尽量使用压缩格式减小贴图大小: l 若干种贴图合并 ...
-
Linux下安装部署Samba共享盘的操作手册
简述 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的 ...
-
Spark DateType cast 踩坑
前言 在平时的 Spark 处理中常常会有把一个如 2012-12-12 这样的 date 类型转换成一个 long 的 Unix time 然后进行计算的需求.下面是一段示例代码: val sche ...
-
Python SyntaxError: invalid token
python命名不能以数字开头,import时会报错
-
Java线程池不错的总结博客
ImportNew线程池总结 Java多线程之Executor.ExecutorService.Executors.Callable.Future与FutureTask 线程池,这一篇或许就够了
-
原生javascript实现回到顶部平滑滚动
function rt() { var d = document, dd = document.documentElement, db = document.body, top = dd.scroll ...
-
Linux(Centos)下调整分区大小(以home和根分区为例)
在安装新系统的时候,有时候没法预估或者说错误的划分了分区大小,常常会导致我们后面的操作出现极大地不方便,比如某个分区分的太小了,导致 软件安装的时候会报安装空间不够,这就很麻烦.在这里我就记录一下 ...
-
django----注意事项
不用带参数 必须要带参数: