zoukankan      html  css  js  c++  java
  • 基于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安装目录externinclude;”
    2:在项目属性中的库目录添加“Matlab安装目录externincludelibwin64microsoft;
    

     

    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!!!
    ");
    	}
    	else {
    		//system("pause");
    		printf("fail
    ");
    	}
    	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

  • 相关阅读:
    在Oracle的FORM中高亮显示鼠标点击或光标所在的行
    Attempt to refer to a unregistered pool by its alias 'MySQL'
    C#中手机号验证,邮箱验证
    Caused by: java.lang.ClassNotFoundException:org.apache.commons.logging.LogFactory
    org.apache.jasper.JasperException: /existingstudent.jsp(4,4) Invalid directive
    C#中使用cookies
    【old】简单易用的鹰眼类源代码下载
    MapGuide Tips如何限制MapGuide Ajax Viewer的缩放范围
    MapGuide应用开发系列(八)MapGuide Studio准备地图之地图(Map)
    基于MapGuide的在线WebGIS站点介绍
  • 原文地址:https://www.cnblogs.com/boyiliushui/p/7838483.html
Copyright © 2011-2022 走看看