C++和matlab混合编程(用MFC给matlab做界面)

环境:VS2010;matlab2014a

目标:用VS做一个MFC界面,调用matlab程序。

目录

matlab生成dll库

步骤:1,将用matlab编译好的m文件放在,matlab安装目录bin文件夹下。

我的文件位置为:G:\matlab2014\Matalab 2014\anzhuang\bin

我的m文件[calcualte.m]为:

function y = calculate(a,b)

a1 = a;
b1 = b;
y = a1 + b1;

2,在bin文件下,打开cmd命令,输入

mex -setup C++

3,输入 【注意cpplib和cpp不同】

mcc -W cpplib:A -T link:lib calculate.m

等一会之后,会出现下图的几个文件,将箭头的几个文件【.dll .h .lib】,放在MFC创建工程下。

至此,matlab生成dll任务结束。

可能会遇到在用mcc命令时,license未完全破解的问题,这是个因为你的matlab版本没有完成破解成功,需要再找其他的matlab。

创建MFC,调用matlab

 这块分为两个步骤:A,配置环境 B,调用程序;

A 配置环境

步骤1,将上面生成的三个文件,放在创建的工程下。我的位置如下:工程名字为Test【放在...\Test\Test下】

C:\Users\happy\Documents\Visual Studio 2010\Projects\Test\Test

步骤2,在项目头文件处,添加A.h文件。

右键->添加现有项->找到文件添加

在TestDlg.cpp下,写入头文件。

#include "A.h"

步骤3,打开项目属性,配置链接库等。

项目->Test属性->VC++目录->添加包含目录和库目录

包含目录有下面四个:在matlab安装目录下

库目录有三个:

添加之后,再添加链接库。

项目->Test属性->输入->附加依赖库

依赖库如下:

添加完成之后,点击确定即可。

说明:我看了很多博主的文章,在配置这里,可能添加的包含目录【我的有重复】和依赖库都没有这么多,但是在我这里,少一个都会报错。所以,我添加了很多依赖库。其中A.lib是mcc命令创建的。

步骤4,更改32位为64位。

因为刚开始创建的时候,是32位的,但是matlab是64位的,所以将MFC变成64的。

Debug->配置管理器->活动解决方案平台->新建->键入或选择新的平台->选择x64->确定

就会发现,已经从Win32改成了x64如图。

配置结束。

B调用matlab

创建了一个加法器,实现两个数相加,出来结果。

void CTestDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	int a1,b1,sum;
	a1 = GetDlgItemInt(IDC_EDIT1);
	b1 = GetDlgItemInt(IDC_EDIT2);
	if(!AInitialize()){ \\初始化,必须有
		CString s;
		s = "未连接";
		AfxMessageBox(s);
	}
	mwArray  a(1, 1, mxINT32_CLASS);
	mwArray  b(1, 1, mxINT32_CLASS);
	mwArray  c(1, 1, mxINT32_CLASS);
	a.SetData(&a1,1);
	b.SetData(&b1,1);
	
	calculate(1,c,a,b);
	sum = c.Get(1,1);

	SetDlgItemInt(IDC_EDIT3,sum);
	ATerminate();
}

其中 mwArray是一种matlab与VS交互用的数据结构,其具体用法可以看下面这篇博客。需要注意的是,matlab数组是从1开始的,C++是从0开始的。

https://blog.csdn.net/wangrenbao123/article/details/70169029

结果显示

编译之后,结果就是下图的效果。

遇到的问题总结:

1,配置步骤,必须按照步骤来,要不然会出现各种各样的错误。

2,我在运行的时候,遇到了这个异常:"settings::core::exception::NoSuchKey”,是由于matlab版本问题,要降低版本,我从2016a降到了2014a版本。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Foneone

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

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

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

打赏作者

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

抵扣说明:

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

余额充值