<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > Matlab與C/C++混合編程接口及應用

Matlab與C/C++混合編程接口及應用

作者: 時(shí)間:2012-08-27 來(lái)源:網(wǎng)絡(luò ) 收藏

2.2 調用C/C++動(dòng)態(tài)連接庫

提供對動(dòng)態(tài)連接庫DLL 文件的[7]。利用該,可在 中調用動(dòng)態(tài)連 接庫導出的函數。 對DLL 的支持各種語(yǔ)言編寫(xiě)的DLL 文件。在調用DLL 文件之 前,需要準備函數定義的頭文件。對于C/C++語(yǔ)言開(kāi)發(fā)的DLL 文件,可使用源程序中相應的 頭文件;而對于其他語(yǔ)言開(kāi)發(fā)的DLL,則要手工準備等效的C 語(yǔ)言函數定義頭文件。

在Matlab 中利用動(dòng)態(tài)連接庫接口技術(shù)通常需要完成以下4 個(gè)步驟:

(1)打開(kāi)動(dòng)態(tài)連接庫文件;(2)為調用函數準備數據;(3)調用動(dòng)態(tài)連接庫文件中導出的 函數;(4)關(guān)閉動(dòng)態(tài)連接庫文件。

為了實(shí)現以上步驟,用到的Matlab 函數有:loadlibrary,loadlibrary,calllib, libfunctions,lipointer,libstruct,libisloaded。下面舉例說(shuō)明Matlab 調用C/C++動(dòng)態(tài) 連接庫的方法和步驟:

a.在VC 環(huán)境下,新建工程->win32 動(dòng)態(tài)連接庫->工程名Test1->empty 工程->完成;

b.新建->C++源文件->添加a.cpp,內容為: #include a.h

_declspec(dllexport) int add(int a, int b) { return a+b; }

c.新建->C/C++頭文件->添加a.h,內容為: _declspec(dllexport) int add(int a,intb);然后編譯生成Test1.dll 動(dòng)態(tài)連接庫文件,將Test1.dll 和a.h 拷到Matlab 工作目錄下。

d.在Matlab 命令行下,調用Test.dll:>>loadlibrary(‘Test1’,’a.h’); >>x=7;

>>y=8; >>calllib(‘Test1’,‘add’,x,y); Ans=15 >>unloadlibrary(‘Test1’).

調用DLL 動(dòng)態(tài)連接庫的方法,為Matlab 重用工程實(shí)踐中積累的大量實(shí)用C/C++代碼提供了一種簡(jiǎn)潔方便的方法。與調用MEX 文件相比,該方法更加簡(jiǎn)便實(shí)用。

3 C/C++調用Matlab

在工程實(shí)踐中,C/C++調用Matlab 的方法主要有調用Matlab 計算引擎、包含m 文件轉 換的C/C++文件,以及調用m 文件生成的DLL 文件。

3.1 利用Matlab 計算引擎

Matlab 的引擎庫為用戶(hù)提供了一些接口函數,利用這些接口函數,用戶(hù)在自己的程序 中以計算引擎方式調用Matlab 文件。該方法采用客戶(hù)機/服務(wù)器的方式,利用Matlab 引擎 將Matlab 和C/C++聯(lián)系起來(lái)。在實(shí)際應用中,C/C++程序為客戶(hù)機,Matlab 作為本地服務(wù)器。

C/C++程序向Matlab 計算引擎傳遞命令和數據信息,并從Matlab 計算引擎接收數據信息[2]。

Matlab 提供了以下幾個(gè)C 語(yǔ)言計算引擎訪(fǎng)問(wèn)函數供用戶(hù)使用[8]:engOpen,engClose, engGetVariable,engPutVariable,engEvalString,engOutputBuffer,engOpenSingleUse, engGetVisible,engSetVisible。

下面以C 語(yǔ)言編寫(xiě)的、調用Matlab 引擎計算方程x3 ?2x+5=0根的源程序example2.c 為 例,說(shuō)明C/C++調用Matlab 計算引擎編程的原理和步驟:

#include windows.h> #include stdlib.h>

#include stdio.h> #include engine.h

int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,

LPSTR lpszCmdLine, int nCmdShow)

{ Engine *ep; mxArray *P=NULL,*r=NULL;

char buffer[301]; double poly[4]={1,0,-2,5};

if (!(ep=engOpen(NULL)))

{fprintf(stderr,nCan't start MATLAB enginen); return EXIT_FAILURE;}

P=mxCreateDoubleMatrix(1,4,mxREAL); mxSetClassName(P,p);

memcpy((char *)mxGetPr(P),(char *)poly, 4*sizeof(double));

engPutVariable(ep,P); engOutputBuffer(ep,buffer,300);

engEvalString(ep,disp(['多項式',poly2str(p,'x'),'的根']),r=roots(p));

MESSageBox(NULL,buffer,example2 展示MATLAB 引擎的應用,MB_OK);

engClose(ep); mxDestroyArray(P); return EXIT_SUCCESS; }



關(guān)鍵詞: Matlab 混合編程 接口

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>