VC和Matlab混編第一課

2021-06-19 22:44:52 字數 1798 閱讀 9269

vc和matlab混編,最常用的就是用前者編寫介面exe,後者編寫演算法dll。特別是在後者擅長的領域,如數學、**等顯得特別有意義。

先說dll生成。有下面乙個m檔案,實現加法功能,c=a+b,**如下:

function [c]=abc(a,b)

c=a+b

設檔名為abc.m。在matlab中載入此檔案後,執行,選擇「change folder」,這樣執行各命令時會容易找到路徑。在命令列中輸入下面命令進行編譯:

mcc -b csharedlib:abclib abc.m

簡單解釋一下,mcc是編譯命令,大概是matlb-c-compiler的首字母縮寫;-b表示**(bound)引數,mcc的引數很多,有些編譯的引數是常用的,不妨編寫成乙個集合,如這裡的csharedlib,字面理解就是c共享庫。abclib是最終生成的庫名,abc.m是m檔名。

編譯執行完成後,在m檔案的同目錄下會出現很多檔案,這裡基本用到的就是.h檔案,.c檔案,lib檔案,dll檔案。用vc自帶的depends工具檢視dll,會發現匯出函式自動加上了mlf字首,如此處的mlfabc。

新建vc工程,win32, console還是mfc任意。檔案中加入下面兩行:

#include "abclib.h"

#pragma comment(lib,"abclib.lib")

這裡必須要注意,這兩句請放得靠前一些,例如檔案最上部。如果它們被放在最下面,往往會出現錯誤(是ifdef、else之類的巨集產生了錯亂)。另外需要包含的標頭檔案還有:#include "mclmcr.h" 、 #include "matrix.h"。

當然了,要把.h檔案和.c檔案加入工程。

呼叫之前,需初始化一下,可以在initinstance裡或dialog的initialize裡面,如下:

if(!abclibinitialize())   

結束時還要來乙個終止:

abclibterminate();

這兩個函式都是dll中自動生成的,直接調 用即可。

以上,都是準備工作,下面呼叫abc即dll中的mlfabc函式進行加法運算:

double a[1],b[1];

a[0] = 4;

b[0] = 11;

mxarray *x = mxcreatedoublematrix(1,1, mxreal);

mxarray *y = mxcreatedoublematrix(1,1, mxreal);

//mxdestroyarray(x); //銷毀mxarray陣列x和y。

//mxdestroyarray(y);

memcpy(mxgetpr(x), a, 1*sizeof(double)); //將陣列x複製到mxarray陣列xx中。

memcpy(mxgetpr(y), b, 1*sizeof(double)); //將陣列x複製到mxarray陣列yy中。

mxarray * parrayout;

parrayout = null;

mlfabc(1,&parrayout,x,y);

cstring s;

s.format("%f",*(mxgetpr(parrayout)));

afxmessagebox(s);

解釋一下。matlab中並未具體定義資料型別,像c++中的int, char, long,在matlab中統統沒有,matlab中所有資料型別都是矩陣(陣列),哪怕是乙個數,也要看成是乙個1x1的陣列,double型。這裡,用a[0]和b[0]來構造兩個輸入引數。用mxarray *型別來接收轉換後的位址,這樣matlab才會認識。

加法演示完啦,明年再寫第二課……。

開學第一課

因為是開學第一課,而且這是我的第一篇個人部落格,更何況還是技術部落格,所以我會認真對待,不過畢竟第一次,所以難免各方面會有不足,所以有任何的意見或建議都可以提出來以供本人提高。下面廢話少說,進入正題。使用quartus,新建乙個專案,建立乙個bdf檔案,雙擊bdf空白處,新增元件符號。找到 7413...

鋼琴第一課

哇 昨天去上了第一節鋼琴課,好開心好開心 核心要義 感覺自己像個小公主 儀態儀容 屁股只能坐一半 身體保持正直 手非常溫柔非常輕鬆地搭到琴鍵上 胳膊肘整個過程保持不動 兩手手腕微微向內旋轉,盡量讓手背與琴鍵平行,中空狀。落下時,呈自由落體狀,每個手指放到該放的琴鍵上。一首曲目彈奏完畢,手,輕輕地溫柔...

第一課 變數

一 變數 一 變數命名 1 使用具有固定意義的英文單詞或縮寫,如srv server,skt socket 2 駝峰命名法 1 大駝峰 myfirstlove,intoone,用大駝峰給類命名 2 小駝峰 myfirstlove,intoone,其他變數和函式的命名 3 posix my first...