日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

matlab r2012a win10,vs2010和Matlab R2012a 混合编程

發布時間:2025/3/19 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab r2012a win10,vs2010和Matlab R2012a 混合编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注:Matlab r2010b及以后版本才支持vs2010, 之前版本中mbuild命令輸入后可能會找不到vs2010編譯器。

2.書寫m文件

示例如下:

function [ c ] =

MyAdd( a,b )

%UNTITLED Summary of

this function goes here

% ?Detailed explanation goes here

c=a+b;

end

保存為MyAdd.m

3.創建動態鏈接庫

Matlab中輸入:mcc -W

cpplib:libMyAdd -T link:lib MyAdd -d [生成文件路徑]

其中,mcc是Matlab提供的編譯命令,對于這一點,Matlab的幫助說明如下:-W?lib:string?link:lib其中-W是控制編譯之后的封裝格式,cpplib,是指編譯成C++的lib,cpplib冒號后面是指編譯的庫的名字,-T表示目標,link:lib表示要連接到一個庫文件的目標,目標的名字是后面的MyAdd,即你寫的m函數的名字。運行完之后,你的目錄下面,將會出現以下一些文件:libMyAdd.cpplibMyAdd.explibMyAdd.dlllibMyAdd.exportslibMyAdd.hlibMyAdd.libmccExcludedFiles.logreadme.txt具體每一個文件的意思,請查幫助,這里只說其中很有用的幾個:libMyAdd.dll是編譯好的動態庫,MyAdd這個函數封裝在里面,libMyAdd.h是對應的頭文件,在C里面調用這個函數的時候,需要include這個頭文件在這個頭文件的最后,你可以看到下面的內容:extern?LIB_libMyAdd_CPP_API?void?MW_CALL_CONV?MyAdd(int?nargout,?mwArray&?c,?const?mwArray&?a,?const?mwArray&?b);這就是MyAdd的C函數的聲明。nargout表示輸出變量的個數,a,b,c就是對應了m函數的幾個變量。注意,a,b,c三個變量的類型是mwArray,這是Matlab提供的一個特殊的變量類型(在7.0的版本,編譯之后,變量類型是mxArray)。mwArray是一個類,具體可以查幫助。

4.系統環境配置

Computer?-?>?Properties?->?Advanced?system?settings?->?Environment?Variables?->?User?Variables?->?path,?添加(MATLAB下為MATLAB

2012軟件安裝目錄)

...\MATLAB\extern\lib\win32\microsoft;

...\MATLAB\bin\win32

Computer?-?>?Properties?->?Advanced?system?settings?->?Environment?Variables?->?System?Variables?->?path,?添加

...\MATLAB\runtime\win32;

...\MATLAB\bin;

...\MATLAB\extern\lib\win32\microsoft;

...\MATLAB\bin\win32

5.vs2010環境配置

a.創建一個console?application,并新建一個cpp文件(否則之后Property?Pages中沒有C/C++目錄)

b.?設置目錄

①Property?Pages?->?VC++?Directories?->?Include?Directories,?添加(安裝目錄下)

...\MATLAB\extern\include\

②Property?Pages?->?VC++?Directories?->?Library?Directories,?添加

...\MATLAB\extern\lib\win32\microsoft

③Property?Pages?->?C/C++?->?General?->?Additional?Include?Directories,?添加

...\MATLAB\extern\include\

④Property?Pages?->?Linker?->?General?->?Additional?Library?Directories,?添加

...\MATLAB\extern\lib\win32\microsoft

⑤Property?Pages?->?Linker?->?Input?->?Additional?Dependencies,?添加

libeng.lib

libmat.lib

libmex.lib

libmx.lib

mclmcrrt.lib

mclmcr.lib

libMyAdd.lib

6.vs2010下完成程序

把剛才生成的lib*.h?lib*.dll?lib*.lib文件復制到剛剛新建的工程的文件夾下,并且用添加—現有項添加的工程中。(此處的*代表你的m文件名稱)

其中testmat3.cpp程序如下:

#include

#include

#include

#include "mclmcr.h"

#include "matrix.h"

#include "mclcppclass.h"

#include "libMyAdd.h"

using namespace std;

int main()

{

double a = 6;

double b = 9;

double c;

// initialize lib,這里必須做初始化!

if( !libMyAddInitialize())

{

std::cout <

libMyAdd!" << std::endl;

return -1;

}

// 為變量分配內存空間,可以查幫助mwArray

mwArray mwA(1, 1, mxDOUBLE_CLASS); //

1,1表示矩陣的大小(所有maltab只有一種變量,就是矩陣,為了和Cpp變量接軌,設置成1*1的矩陣,mxDOUBLE_CLASS表示變量的精度)

mwArray mwB(1, 1, mxDOUBLE_CLASS);

mwArray mwC(1, 1, mxDOUBLE_CLASS);

// set data,不用我解釋了吧,很簡單的,調用類里面的SetData函數給類賦值

mwA.SetData(&a, 1);

mwB.SetData(&b, 1);

// using my add,掉我自己寫的函數

MyAdd(1, mwC, mwA, mwB);

// get data,不用我解釋了吧,很簡單的,調用類里面的Get函數獲取取函數返回值

c = mwC.Get(1, 1);

std::cout<

<

// 后面是一些終止調用的程序

// terminate the lib

libMyAddTerminate();

// terminate MCR

mclTerminateApplication();

return 0;

}

7. 程序運行結果:

出現此結果基本上就說明混合編程成功了。

注:如果m文件中有畫圖方面的函數,則前邊一定要有延時函數,或者在c程序中m函數調用后加上getchar(),否則當lib和MCR被terminated后圖像會被關閉----即程序運行后會出現圖像“一閃而過”的效果!

8. 參考資料:

(1)<>

by?lihui-mn@163.com

(2)<

與c++混合編程>> --------matlab r2011a and

vs2010

以上過程其實還大可簡化。如有問題,歡迎交流!

總結

以上是生活随笔為你收集整理的matlab r2012a win10,vs2010和Matlab R2012a 混合编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。