?? matlab builder for.net .txt
字號:
VC++調用Matlab Builder for.NET 的COM組件
作者:卞曉波
1.VC++與Matlab幾種常用的集成方法
Matlab與VC++混合編程的具體方式有多種,根據Matlab是否運行可大致分為兩類:Matlab在后臺運行和可以脫離Matlab環境運行。Matlab 5.0以后版本均自帶C/C++編譯器,可將其程序文件(M文件)轉換為C-MEX或C/C++程序。
第一種方式是Matlab引擎采用客戶機/服務器的計算方式,通過Windows的ActivcX通道和Matlab接口。在具體的應用中,VC的程序作為前端客戶機,通過調用Matlab引擎在后臺與Matlab服務器建立連接,實現動態通信。這種方法實現較為簡單,不要求連接整個Matlab,只需要嵌入必要的Matlab引擎庫,可大大地節省系統資源,但這種Matlab在后臺運行,運行效率低下。
第二種方式是使用Mathtools公司推出的Matlab集成編譯開發平臺Mideva,它提供了對M文件的解釋執行和開發環境支持。經過簡單設置后Mideva可以將M源文件轉換為C/C++,然后添加到VC++工程中。 也可以先利用Mideva直接生成EXE文件(方法是啟動Mideva,在菜單"File->Compile to exe"中, 選出需要轉換的M文件),然后在VC++中通過shellexec()或winexec()等外部函數完成Shell調用。這種方法簡單方便,但運行時出現一個控制臺窗口,而且由于VC和Matlab之間不能交互,通用性差。
第三種方式是通過Mablat編譯器將其m文件轉換成為C/C++代碼文件并生成必要的dll庫后再通過VC++編譯器生成可獨立執行的應用程序,這種方式可以直接調用其中的庫函數,生成并發布不必依賴Matlab的可執行文件。
第四種方式是通過Matlab Add-in實現Matlab與VC的混合編程。在Matlab 6.0以后版本對其編譯器作了較大的改進,其支持更多的數據類型,更強的優化功能,更為重要的是其Matlab Add-in提供了一個Matlab和VC直接集成的途徑。它具有一些新的特征:快速集成M文件到C++工程中,創建獨立的 C/C++應用程序或C MEX DLL;通過M文件創建共享庫或MEX文件;內含Visual Matrix Viewer,調試過程中可以查看矩陣變量的值; 直接修改M源文件而不是修改生成的C/C++文件;方便快捷地打包應用程序等。但是,這種方式仍然會有部分的Matlab函數庫不能使其調用。
最后一種方法也是最新的用Matlab2007a下的Matlab Builder for .NET,這是最方便的也是本文下面將要使用的集成方式。
2.Matlab的COM Builder 使用方法
試驗環境:Windows XP SP2, VC6.0++ SP6, Matlab2007a,
參考步驟:
2.1當然是先建立 matlab 的 m 文件。
我們先將一個圖片放入F:\matlab2007code\bianxb文件夾下,命名為cat.jp再準備一個測試文件testpic.m,如圖2.1:
圖2.1
保存為testpic.m
2.2
2.2.1下面來對 matlab 編譯環境進行設置。 打開matlab,在命令行狀態下鍵入:
mbuild –setup
然后出現如下提示:
這里我們選擇’2’。然后,繼續在命令行狀態下輸入: y
然后出現如下提示:
2.2.2然后,在matlab的workspace下輸入deploytool,就可以啟動Deployment Tool。如圖圖2.2
圖2.2
點擊工具欄上的 菜單下的New Deployment Project新建一個MATLAB Builder for .NET中Generic COM Component,在Name中加入工程名:bian.prj,如圖2.3所示:
圖2.3
單擊OK,如圖圖2.4
圖2.4
2.2.3單擊Deployment Tool上的 圖標,選擇加入的文件testpic.m可得如下圖2.5:
圖2.5
單擊Add如圖2.6:
圖2.6
2.2.4單擊Deployment Tool上的 圖標,進行編譯設置。如下圖2.7:
圖2.7
備注:如果要使生成的可執行文件在沒有安裝matlab的計算機上使用,還必須在目標計算機上安裝MCR(matlab組件運行環境).可利zipfile=buildmcr(dirname)來創建一個包含MCR需要的所有文件的zip文件,在deploytool里也有相關選項.一般需要發布的文件有3個:(1)編譯得到的可執行文件或dll、lib。(2)CTF文件(組件技術文件)。(3)MCRInstaller.zip.
2.2.5單擊Deployment Tool上的 圖標
單擊Deployment Tool上的 圖標,進行編譯設置圖2.8
圖2.8
單擊OK。
單擊Deployment Tool上的 圖標,
2.3 編譯完后就會在matlab工作目錄下的bian目錄下生成兩個文件夾:一個是src,里面存放一些中間文件;另一個是distrib,里面就是動態鏈接庫形式的com組件文件等。在這里,編譯后distrib\文件夾下生成一個bian_1_0.dll,這就是做好的com組件。
此時,可以在bian\distrib文件夾里看,生成的bian.exe就是打包后的解壓程序,雙擊就會解壓出一些文件,再點擊解壓出來的install.bat就可以實現安裝。
3 VC調用com組件的方法
3.1新建一個vc工程
新建一個vc工程bianvc(MFC AppWizard(exe)),基于對話框的工程(其它為VC默認)。在編輯bianvc的對話框資源,添加ID_TEST(調用貓圖)和ID_EXIT(關閉貓圖)兩個按鈕,并通過ClassWizard 添加上述兩個按鈕的消息響應函數,如圖3.1所示。
圖3.1
3.2對 VC 的編譯器環境進行設置。
在Tools|options|directory里面設置include和lib的路徑,分別添加一項,指向matlab安裝目錄中的\extern\include和 \extern\lib (見圖3.2和圖3.3)
圖3.2
圖3.3
3.3設置工程bianvc,Project|Setting|C++|Precompiled Headers,選擇Automatic use of precompiled headers,并將header設為stdafx.h,如圖3.4所示:
圖3.4
3.4在bianvcDlg中加入公共變量Ibianclass *sp。
3.5點擊VC下的tools->ole/com objectviewer打開oleviewer工具,在oleviewer工具的右邊選擇type libraries,找到bian 1.0 type library,選中并且右鍵,選擇view,點save按鈕,分別保存為bian_1_0.h和bian_1_0.c(也可以存為bian_1_0.idl接口文件),我們就可以根據這兩個文件實現對bian_1_0.dll調用。
圖3.5
將bian_1_0.h和bian_1_0.c加入工程,并復制一個bian_1_0.dll到工程目錄下,由于bian_1_0.dll還要用到mwcomutil.dll,所以將\bianxb\bian\src下的mwcomutil.h和mwcomtypes.h也加入工程中。
3.5示意調用代碼如下:
******************************bianvcDlg.h****************************
#include "mwcomutil.h"
#import"D:\Program Files\MATLAB\R2007a\bin\win32\mwcomutil.dll" raw_interfaces_only
#include "bian_1_0.h"
************************bianvcDlg.cpp中部分代碼*********************
void CBianvcDlg::OnTest()
{
if (FAILED(CoInitialize(NULL)))
{
AfxMessageBox("unable to initialize COM");
}
Ibianclass *st=NULL;
HRESULT hr=CoCreateInstance(CLSID_bianclass,NULL,CLSCTX_ALL,IID_Ibianclass,(void**)&st);
if (SUCCEEDED(hr))
{
st->testpic ();
AfxMessageBox("succeed");
st->Release();
}
else
{
AfxMessageBox("unsucceed");
}
}
void CBianvcDlg::OnExit()
{
OnCancel();
CoUninitialize();
}
4.在目標機上的發布
4.1 在目標機上看是否安裝了Microsoft.NET Framework2.0,若沒有,則先安裝Microsoft.NET Framework2.0。
4.2 先找到工程 bianxb\bian\distrib下的bian_pkg.exe,在DOS窗口中輸入A,并且回車。按照提示操作即可。
4.3運行工程bianxb\bianvc\Release下的bianvc.exe.即可調用成功。
5 結束語
通過應用編程接口,可以把其他高級語言靈活多變的編程能力和matlab的強大計算能力結合起來。Matlab Builder for .NET工具可以方便地把matlab程序做成com組件,為系統開發人員提供了簡單、易用地應用程序接口。和其他接口方法相比,將matlab程序做成com組件,使其他語言工具和matlab的混合編程更加簡單。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -