1. 程式人生 > >matlab和c++混合程式設計---Mex結構和mexFunction引數傳遞

matlab和c++混合程式設計---Mex結構和mexFunction引數傳遞

最近的專案需要matlab和C的混合程式設計,經過一番努力終於完成了專案要解決的問題。現在就將Mex的一些經驗總結一下,當然只是剛剛開始,以後隨著學習的深入繼續新增。首先講講寫Mex的一些常規規定,然後我們會重點關注混合程式設計中最難解決資料的問題--結構到底如何轉換,並且後面會重點說一下自己的程式。

一、Mex的結構

先看一個簡單的程式(該程式儲存在matlab主目錄下名字是mexDemon.cpp,或者在主目錄下新建一個.cpp檔案):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include "mex.h" //專案---右鍵屬性---c/c++---常規---附加包含目錄---新增“D:\programs installing\matlab2016\extern\include”,將mex.h包含進去。 //加入標頭檔案,該標頭檔案在VS2010中無法include,但是不影響其在matlab中的編譯,反而在matlab編譯還需要include它 #include <vector> using namespace std; void mexFunction(int nlhs, mxArray *plhs[],int
 nrhs,const mxArray *prhs[]) //mexFunction就類似於main函式 { //nlhs代表的是輸出引數的個數 //plhs是一個指標陣列,裡面的指標指向mxArray型別,每一個指標指向一個輸出 //nrhs代表的是輸入引數的個數 //prhs是一個指標陣列,裡面的指標指向mxArray型別,每一個指標指向一個輸入   vector<vector<double> > array2d; double *z; plhs[0] = mxCreateDoubleMatrix( 5, 6, mxREAL);
//第一個輸出是一個5*6的矩陣 z = mxGetPr(plhs[0]);//獲得矩陣的第一個元素的指標 array2d.resize(5); int ii = 0; for(int i = 0; i < 5; i++){ for(int j = 0; j < 6; j++){ z[i*6 + j] = ii; //指標訪問矩陣是列優先的,請自己迴圈程式和分析輸出結果 ii++; }

相關推薦

matlabc++混合程式設計---Mex結構mexFunction引數傳遞

最近的專案需要matlab和C的混合程式設計,經過一番努力終於完成了專案要解決的問題。現在就將Mex的一些經驗總結一下,當然只是剛剛開始,以後隨著學習的深入繼續新增。首先講講寫Mex的一些常規規定,然後我們會重點關注混合程式設計中最難解決資料的問題--結構到底如何轉換

matlabC/C++混合程式設計--Mex (六)引數傳遞

最近的專案需要matlab和C的混合程式設計,經過一番努力終於完成了專案要解決的問題。現在就將Mex的一些經驗總結一下,當然只是剛剛開始,以後隨著學習的深入繼續新增。首先講講寫Mex的一些常規規定,然後我們會重點關注混合程式設計中最難解決資料的問題--結構到底如何轉換

matlabc++混合程式設計---matlabvs的環境配置問題及方法步驟(轉載)

matlab和c++混合程式設計---方法和步驟 matlab和c++混合程式設計---matlab和vs的環境配置問題 摘要:Matlab具有很強的數值計算和分析等能力,而C/C++是目前最為流行的高階程式設計語言,兩者互補結合的混合程式設計在科學研究和工程實踐中具有非常重要的意義。從Matlab呼叫C

MatlabC++混合程式設計——在matlab除錯過程中可以跳入VS除錯觀察.cpp檔案中的資料

1.在matlab中為.cpp使用mex編譯生成.mexw64(64位)檔案 在matlab中封裝編譯函式: compile_gc(debug_flag) compile_gc(debug_flag=1):生成兩種檔案,(.mexw64和.mexw64.pdb) compi

matlabc++混合程式設計---方法步驟

  摘要:Matlab具有很強的數值計算和分析等能力,而C/C++是目前最為流行的高階程式設計語言,兩者互補結合的混合程式設計在科學研究和工程實踐中具有非常重要的意義。從Matlab呼叫C/C++程式碼及C/C++呼叫m檔案兩方面,深入地研究了它們之間混合程式設計的原理和

HalconC#混合程式設計(一):數字識別

Halcon匯出C#程式碼 using System; using HalconDotNet; public partial class HDevelopExport { public HTuple hv_ExpDefaultWinHandle; //

Qt5.8 QMLC++混合程式設計的兩種方式(附帶原始碼)

Qt5.8  QML和C++混合程式設計的兩種方式(附帶原始碼)編譯環境:win10 專業版    Qt5.8     Qt 提供了兩種在 QML 環境中使用 C++ 物件的方式:上手敲一下,很快就能理解              點選開始,中間的圖形開始變化,上面顯示時間,

MatlabC混合程式設計Matlab呼叫C

類似Matlab的指令碼語言的最大詬病就是執行速度慢,而C的編寫難度大,但執行速度快,所以用Matlab呼叫C可以很好的互補。 用Matlab呼叫C語言如下,其中mexFunction是一個介面函式,

matlabC++混合程式設計 matlab釋出、打包DLL

本文主要講述將matlab編寫好的m函式匯出成dll,以供C++程式呼叫。使用matlab命令手動打包和matlab工具箱中deploytool的使用。寫本文的主要原因是,在專案過程中遇到一個棘手問題:專案使用了vlfeat庫,而vlfeat是c編寫的,只是提供

一個基於COM元件的MatlabC#混合程式設計例項

把matlab與其他語言混合使用是一種挺實用的技巧,在前期使用matlab進行演算法設計和計算模擬,而在需要編寫程式原型的時候把matlab演算法模組嵌入到C++或C#的程式裡,一方面省的再用C++或C#重寫程式碼,另一方面也可以直接呼叫matlab裡的一些工具

MATLABVS混合程式設計,除錯C程式設定的斷點顯示“當前不會命中斷點 還沒有為該文件載入任何符號”

        我遇到的問題是matlab和c++混合程式設計,但是在matlab中進行除錯的時候需要呼叫VS2013除錯cpp程式,但是設定的斷點總是出現“當前不會命中斷點 還沒有為該文件載入任何符號”,網上的方法我都試過了,沒有用,自己試出來的方法記錄一下,可能並不適合

QT之C++QML混合程式設計學習筆記

QML中使用C++物件 建立一個測試用的C++物件 #ifndef PIECHART_H #define PIECHART_H #include <QtQuick/QQuickPaintedItem> #include <QColor> #include <

C語言動態庫建立方法,以及python混合程式設計

這篇小結是2016年暑假在新疆出差階段所寫,因為專案需要所以研究了一下。 如有錯誤,歡迎互相交流。 不同編譯器實現python呼叫C語言動態庫方法小結 Windows平臺下Visual Studio 2010編譯器建立動態庫,並呼叫 第一步:建立動態dll動態庫

Python與C混合程式設計!是PythonC都不具備的超能力!

    編寫 c => python 的介面檔案 // vectory_py.c extern "C" { vector<point_t>* new_vector(){ return new vector<point_t>

c++cuda混合程式設計記錄二

/////帶有繼承關係的記憶體分配遇到了問題,父類,子類 sphere *world_device; cudaMalloc( (void**)&world_device,s

Matlab2015b混合程式設計mex找不到VS2013編譯器SDK

很早就出現過這個問題,當時在matlab官網中找到新增Mingw編譯外掛的方法,暫時還能用一用,但是本人在獲取matconv的包的時候總是會出現錯誤,很沮喪,後來重灌了matlab2015b和VS2013,這兩個軟體都是選擇的預設安裝。 重灌之後mbuild -setup

MATLABVS混合程式設計

查了很多資料,最後終於成功了,不容易記錄一下。 MATLAB R2014a,VS2013; 首先在matlab編寫一個測試函式 function [sum,prod]=sum_prod(p1,p2)     sum=p1+p2;     prod=p1.*p2; 在命令框

C++python混合程式設計之在python類建構函式中傳參方法

一、說明:C++專案中用到python相關的知識,這兩天研究了一下C++與python的混合程式設計,網上有很多這方面的介紹,但是怎麼使用python類的建構函式中傳參的介紹卻沒有,這裡研究一下,分享出來。(C++和python相互呼叫的相關介面查詢https:

MatlabC++混合MEX程式設計

一、mexFunction 與C中的main函式一樣,MEX程式中的開始函式為mexFunction.預設變數引數是: void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[

C#基礎_選擇結構循環結構

efault 表達式2 變化 遇到 inf 外部 com 邏輯運算符 分享 關系運算符 > >= < <= != == 對數值的運算 ,結果返回的是 bool值邏輯運算符 && || ! &&a