c matlab 混合程式設計

2021-10-07 23:54:36 字數 1950 閱讀 3780

混編終是乙個繞不開的石頭鴨~so~~do it!我的版本是:vs2017+matlab2016a

matlab中的程式處理:

1.需要將主程式寫為函式形式,例如我這個主程式matdll,形參三個(從c++獲取,包括兩個c++ char*轉為matlab char,乙個float*轉為三維陣列),返回值乙個(返回給c++,matlab返回三維陣列,c++中轉為float*),主程式裡呼叫自己寫的函式是不用變的(變數型別轉換寫在c++程式裡):

function result = matdll(filepath,projectname,data)

if strcmp(projectname,'a') == 1

result = func_a(filepath,data);

else if strcmp(projectname,'b') == 1

result = func_b(filepath,data);

endendend

2.輸入命令列編譯生成dll,輸入第一行進行mex設定,依次選擇c++,vs;設定成功後輸入第三行,檔名是希望生成dll的名字,函式名是主函式的名字,函式的呼叫matlab會自己處理,不用多餘操作。之後會在當前目錄下生成11個檔案,稍後需要用到dll,lib,ctf,**件。

mex -setup

%mcc -w cpplib:檔名 -t link:lib 函式名.m -c

mcc -w cpplib:matdll -t link:lib matdll.m -c

vs中的處理:

1.需要配置vs中的matlab環境,根據matlab安裝位置調整吧:

附加庫:

matdll.lib

mclmcrrt.lib

mclmcr.lib

libmx.lib

libmat.lib

標頭檔案包含:

#include "matdll.h"

2.需要匯入生成的dll:

3.**呼叫,其中包含初始化,型別轉換,呼叫過程:

bool isok = 0;

; mwarray simg(3, dims, mxsingle_class);

simg.setdata(pdata, imgwidth* imgheight* bandcount);//將pdata(float*)轉成matlab三維陣列

mwarray mw_result;//宣告乙個返回值

matdll(1, mw_result, mwfilepath, mwfilework, simg);//將資料從matlab空間中取出,含義為,有乙個返回值mw_result,其他是傳入引數

mwarray mwdims = mw_result.getdimensions();

int rsdims = mwdims.numberofelements();

int *irsdims;

int nimgwidth = mwdims.get(rsdims, 1);

int nimgheight = mwdims.get(rsdims, 2);

int nbandcount = mwdims.get(rsdims, 3);

float *resultraster = new float[nimgwidth * nimgheight * nbandcount];

mw_result.getdata(resultraster, nimgwidth * nimgheight * nbandcount);//返回值三維陣列中取出數值賦給resultraster(float*)

} }

以上demo最終實現了,c++傳乙個c++float*(matlab三維陣列)和兩個c++ char*(matlab char)給matlab,返回乙個c++float*(matlab三維陣列)的過程。

Linux下C ,matlab混合程式設計

使用python呼叫c 呼叫matlab生成的動態庫檔案 1 設定編譯器為gcc,在matlab 命令列依次執行命令mex setup和mbuild setup.2 編寫matlab指令碼 3 生成動態庫檔案。mcc w cpplib libmyfunc t link lib myfunc.m c ...

linux系統中的C MATLAB混合程式設計

我研究的是影象盲去模糊演算法,因為前期msdecomp預處理是在linux下用c 寫成的,而後面的優化過程均是用matlab寫成的,因此我需要將這兩部分的 融合在一起。這裡記錄的是我在虛擬機器中在linux系統下實現matlab呼叫c 函式的過程。首先安裝vmware,並選擇系統檔案為ubuntu1...

C C 混合程式設計

c中呼叫c c 中呼叫c都會用到extern c 但兩者的意義卻大不一樣!例 c void foo int x c c code extern c void foo int x 讓c 聯結器能通過過類似於 foo來查詢此函式,而非類似於 foo int這樣的符號。使用extern c 則是告訴編譯器...