基於GUI的mcc編譯和dll生成

基於GUI的mcc編譯和dll生成

1.mcc的編譯

1.1 MCRInstaller編譯器的安裝

找到Matlab下的MCRInstaller,雙擊MCRInstaller編譯器,運行安裝。
html

 

1.2編譯語言的設置

採用mbuild進行編譯語言設定ios

>> 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++語言進行設置,獲得以下結果:web

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

此時,用戶能夠採用Matlab生成exe文件,獲得exe文件後,能夠獨立於Matlab運行。函數

1.3生成exe文件

輸入以下代碼:visual-studio

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.htmlui

dll文件又稱「應用程序擴展」,是軟文件類型。spa

2.1Matlab生成dll供Visual Studio調用

2.1.1Matlab編譯生成dll

簡單的加法運算.net

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

Matlab生成dll文件:code

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

相關文章
相關標籤/搜索