基于GUI的mcc编译和dll生成

基于GUI的mcc编译和dll生成

1.mcc的编译

1.1 MCRInstaller编译器的安装

找到Matlab下的MCRInstaller,双击MCRInstaller编译器,运行安装。

 

1.2编译语言的设置

采用mbuild进行编译语言设定

>> mbuild -setup
MBUILD configured to use 'Microsoft Visual C++ 2015 Professional (C)' for C language compilation.

To choose a different language, select one from the following:
 mex -setup C++ -client MBUILD 
 mex -setup FORTRAN -client MBUILD

选择 mex -setup C++ -client MBUILD ,即C++语言进行设置,得到如下结果:

MBUILD configured to use 'Microsoft Visual C++ 2015 Professional' for C++ language compilation.

此时,用户可以采用Matlab生成exe文件,得到exe文件后,可以独立于Matlab运行。

1.3生成exe文件

输入如下代码:

mcc -m untitled.m

直到结束为止,则生成exe文件。

2.dll生成

开始的环境是win10 64、Matlab 2016b、VS 2015,死活不行呀,老是报引发的异常: 0xC0000005: 读取位置 0x0000000000000008 时发生访问冲突。最后不得已将VS2015换成了VS2013,就可以了^——^还要注意的是VS的编译平台要设置为64位的(我的Matlab为64bit)

https://cn.mathworks.com/support/sysreq/previous_releases.html

dll文件又称“应用程序扩展”,是软文件类型。

2.1Matlab生成dll供Visual Studio调用

2.1.1Matlab编译生成dll

简单的加法运算

function [c]=add(a,b)
    c=a+b;
    return ;
end

Matlab生成dll文件:

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

生成了.dll、.h和.lib后缀的3个文件
或者:使用deploytool(参考文献3

2.1.2设置Visual Studio

  1. 启动Visual Studio,打开相应项目(或者新建一个项目)

    点击项目属性,在VC++中,选择包含目录和库目录。
1:在项目属性中的包含目录添加“Matlab安装目录\extern\include;”
2:在项目属性中的库目录添加“Matlab安装目录\extern\include\lib\win64\microsoft;

 

  1. 进行链接器的设置,选择附加依赖项,设置函数库

     

添加如下:

add.lib       %加法器函数库文件
mclmcrrt.lib   %VS 自带库文件
mclmcr.lib    %VS 自带库文件
  1. 在项目头文件中加载add.dll和add.h文件,资源文件加载add.lib

  2. VS测试代码:

#include<iostream>
#include"add.h"
#include"mclmcrrt.h"
#include"mclcppclass.h"
#include <stdio.h>
using namespace std;

void main()
{
	if (addInitialize()) {
		//system("pause");
		printf("welcome!!!\n");
	}
	else {
		//system("pause");
		printf("fail\n");
	}
	mwArray a(1, 1, mxDOUBLE_CLASS);//赋值
	a(1, 1) = 1;
	mwArray b(1, 1, mxDOUBLE_CLASS);
	b(1, 1) = 1;
	mwArray c(1, 1, mxDOUBLE_CLASS);
	add(1, c, a, b);
	cout << c(1, 1) << endl;
	addTerminate();            //终止函数lib
	mclTerminateApplication(); //终止MCR

}

2.2VS生成dll供Matlab调用

2.2.1 VS准备工作

  1. 用VS新建一个Win32项目,选择dll,勾选空项目。

     

  2. 创建源文件。
    vs_add.cpp
#include "vs_add.h"
#include <stdio.h>
float add(float x, float y){
	return x + y;
}

vs_add.h

#ifndef VS_ADD_H
#define VS_ADD_H
/*check if the compiler is of C++*/
#ifdef __cplusplus
extern "C"
{
#endif
	__declspec(dllexport) float add(float x, float y);

#ifdef __cplusplus
}
#endif
#endif
  1. 单击生成,在Debug目录下有vs2013_matlab2016b.dll

2.2.2 Matlab调用dll

将得到的dll文件,vs_add.h文件复制到Matlab工作路径。

loadlibrary('vs2013_matlab2016b.dll','vs_add.h');
%libfunctions ysw_VS2010_MATLAB2012B -full
m=calllib('vs2013_matlab2016b','vs_add',1.1,2.1)
unloadlibrary('vs2013_matlab2016b')

参考文献:
http://www.cnblogs.com/newpanderking/articles/4057977.html
Matlab GUI入门与实战
http://blog.csdn.net/u013920434/article/details/52077788

posted on 2017-11-15 13:47  LeoSanford  阅读(1536)  评论(0编辑  收藏  举报

levels of contents