VS2010调用matlab2012a进行定标数据处理

主要的实验任务是将,matlab编写的定标程序转换成可以独立运行的.exe文件和供vs2010调用的c++动态链接库。测试,经过转换过后能否提高程序的运行时间。

实验的操作环境:vs2010中文版,matlab2012a,win7,64位

环境的配置:

首先在matlab2012a中输入mbuild  -setup,如下:

接着根据操作分别输入:y,1,y;最终结果如下:

 

到此为止,matlab里的编译器配置已经完成,本例中选择的是vs2010.需要注意的是:不是所有的matlab版本都可以调用任意的vs版本,matlab2010b以后的才可以调用vs2010.

接下来,如果,我们是要生成.exe程序,我们可以直接使用mcc –m完成操作,在matlab的busy结束后,我们可以在路径下看到生成的.exe程序。如果,我们需要将.m文件编译成供vs2010调用的动态链接库,我们需要用mcc -W将matlab编写的.m文件编译成c++语言。注意:在matlab中,mcc的编译只能够用于function函数。所以,我们在操作之前,要先将目标写成函数的.m文件形式。下面,我将以一个加法器的例子详细讲述操作的整个过程:

先编写function函数:

function [c]=add(a,b)

c=a+b;

return;

end

编译:

生成.exe文件
mcc -m add

在路径下会出现一下的图标:

其中add.exe就是我们需要的文件。直接运行它就可以了。本例是示范作用,运行时会提示有错误的,具体的可以使用写好的.m文件,编译好,就可以使用了。

生成供vs2010调用的动态链接库:

这里有两条指令:

mcc -W cpplib:add -T link:lib add

mcc -W lib:add -T link:lib add

第一条是编译生成c++动态链接库

第二条是编译生成c动态链接库

式中cpplib:add中的add是编译后文件的名称,link:lib 后的add是要编译的.m文件。

编译结束后,结果如下

其中.lib是动态链接库,.h是头文件,这两个文件加上.dll是我们在vs2010里需要使用的。

最新推出的matlab2013b由于编译器没有破解完全,操作时会出现一下的错误:

Error using mcc

Test checkout of feature 'Compiler' failed.

所以,我们尽量不要用matlab2013b来完成操作

在matlab里完成操作后,我们在来设置一下vs2010的环境,

在vs2010里新建win32控制台程序,选择无头文件,其他默认设置,进入解决方案后,在项目add点击右键,添加,新建项,选择c++文件(.cpp),文件名可以设置为main,接下来编写程序

#include<iostream>
#include”add.h”
using namespace std;
int main()
{
	if(addInitialize())
	{
		cout<<"sucess!"<<endl;
	}
	else
	{
		cout<<"fail!"<<endl;
			return(0);
	}
	mwArray a(2,3,mxDOUBLE_CLASS);
	mwArray b(2,3,mxDOUBLE_CLASS);
	mwArray c(2,3,mxDOUBLE_CLASS);
	double x[]={1,2,3,4,5,6};
	double y[]={7,8,9,10,11,12};
	double *sum=new double[6];
	a.SetData(x,6);
	b.SetData(y,6);
	add(1,c,a,b);
	c.GetData(sum,6);
	for (int i=0;i<2;i++)
	{
		for (int j=0;j<3;j++)
		{
			cout<<sum[j*2+i]<<" ";
		}
		cout<<endl;
	}
	cout<<"it is successful!!!"<<endl;
	return(0);
}

在程序中添加的头文件

#include<iostream>

#include”add.h”

前者是输入、输出流头文件,后者是我们在matlab中生成的头文件。我们可以打开add.h可以看到里面定义了我们需要的addInitialize()和addTermitate(),以及extern LIB_add_CPP_API void MW_CALL_CONV add(int nargout, mwArray& c, const mwArray& a, const mwArray& b);这三个都是我们在main函数中经常要用到的。mxArray是我们matlab矩阵与vs2010的数据接口。

注意:两个头文件,一个是〈〉另一个是“”,这个区别我暂时也不是很清楚,但是若使用#include”add.h”,会出现错误:

这些都完成以后,配置一下vs2010,解决方案资源管理器——(项目)add——右键——属性

点击 链接器——常规——附加库目录,添加

C:\Program Files\MATLAB\R2012a\extern\lib\win64\microsoft

E:\matlab与vc的混合编程\add\add

前面一个是matlab自己的动态链接库,后面一个是自己的路径;对于32位机,我们第一项可以改为C:\Program Files\MATLAB\R2012a\extern\lib\win32\microsoft

在链接器——输入——附加依赖项,添加

add.lib

mclmcrrt.lib

mclmcr.lib

其中第一项是我们自己生成的,后面两者是matlab自带的,我们在add中其实用到了。

我们使用的是64位机,我们需要打开配置管理器,点击新建,

 

 在第一个下拉框中选择x64

32位机可以默认设置。接下来就是编译,我们按下F5,或者点击运行图标,出现了下面的错误:

“¡ãadd.exe”¡À: 已°?加¨®载?“¡ãC:\Program Files\MATLAB\R2012a\bin\win64\libmwrookfastbp.dll”¡À,ê?Cannot find or open the PDB file
“¡ãadd.exe”¡À: 已°?加¨®载?“¡ãC:\Program Files\MATLAB\R2012a\bin\win64\libmwspqr.dll”¡À,ê?Cannot find or open the PDB file
程¨¬序¨°“¡ã[2452] add.exe: 本À?机¨²”¡À已°?退ª?出?,ê?返¤¦Ì回?值¦Ì为a 0 (0x0)。¡ê

 原来我们应该是要按下crtl+F5就可以了,或者这个键

这个键在原来的工具框中式没有的,我们可以把鼠标按到图示

点击以后,选择自定义,出现

选择工具栏中的生成菜单——添加命令——类别中选择调试——选择开始执行(不调试)

在确定,就可以了,在工具栏中就会出现   运行的程序   图标了。运行的结果:至此,add就结束

最后,我们在工作的过程中发现,直接运行时,会出现,matlab的figure图一闪而过,这个时候。这是由于,程序运行一次,就没有了,我们需要在程序中添加system(“pause”)或者在return 0 前加getch(),这两种情况下要在头文件中加入#include<stdlib.h>。 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒听雪落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值