程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 淺析VC與Matlab聯合編程(三)

淺析VC與Matlab聯合編程(三)

編輯:關於VC++

在“淺析VC與Matlab聯合編程<一>”和“淺析VC與Matlab聯合編程<二>”中介紹了matcom,這個工具可以將用matlab寫的m文件翻譯成C++文件,或者是可執行文件(exe)或庫文件(dll)。但是matcom在很多方面也有限制,比如,對struct等類的支持有缺陷,部分繪圖語句無法實現或得不到准確圖象,尤其是三維圖象。

實際上VC與matlab的接口實現方法有很多種,matcom只是其中一種,本文再介紹一種比較容易實現的方法:COM接口方法。COM(Compponent Object Model組件對象模型)是一項比較復雜的技術,詳細講的話幾本書也講不完,所以在這裡不作介紹,本文通過一個例子詳細介紹如何在matlab下做COM組件,以及如何在VC中調用COM組件。

首先在Matlab編輯器裡編輯m函數文件:啟動matlab->File->New->M-file 函數內容如圖1:該函數無輸入輸出參數,文件保存為huatu.m。

圖1 m函數huatu.m

在matlab下建立COM組件,步驟如下:

1、在matlab command window 輸入如下命令:

>> comtool

出現com編輯界面,如圖2:

圖2 com組件編輯界面

2、新建工程:File->New Project…,如圖3。

圖2 com組件屬性設置

3、設置組件屬性,在"Component name"項中填寫組件名稱"component",這時候會自動生成類"component",在"Class name"項中填寫類名稱"huatu",如圖4,

圖4 com組件屬性設置1

為了便於區分,選中"Classes"中的"component",點擊“remove”按鈕,將類component移除,再點擊"Add>>"添加新類huatu,結果如圖5。點擊"OK",接下來出現一個對話框,選擇"Yes".

圖5 com組件屬性設置2

4. 添加文件:選中左邊工作區的"huatu",點擊Project->Add File…,選擇已經編輯好的函數文件huatu.m,如圖6。需要注意的是m文件必須是m函數,否則會報錯,如果是m腳本文件的話,只需要改為無輸入輸出參數的m函數即可。

圖6 添加m文件

5、生成 com組件:點擊Build->COM Object…,結果如圖7。

圖7

com組件已經由matlab做好,默認的保存位置為:matlab安裝位置\work\component。

VC中調用COM組件,步驟如下:

1、在VC中建立名為ComHuaTu的基於對話框的MFC(exe)。

2、面板上添加一個名為“畫圖”的button按鈕,如圖8。

圖7 工程界面

3、將component_idl.h 和component_idl_i.c文件拷貝到VC建立的工程ComHuaTu目錄下。兩文件默認目錄為\work\component\src

4、將上面兩文件加入工程:工程->添加工程->Files,選擇剛剛拷到目錄下的component_idl.h 和component_idl_i.c文件。

5、將目錄/extern/include/下的mwcomtypes.h拷貝到工程ComHuaTu目錄下,並加入到工程中,方法同上。

6、為程序添加頭文件component_idl.h 、component_idl_i.c和mwcomtypes.h,結果如圖9

圖9 添加頭文件

7、按鈕畫圖函數添加代碼:

圖10 添加按鈕函數代碼

函數代碼的意義涉及到COM,正在寫VC調用COM組件所涉及到的有關COM方面的知識。

8、設置預編譯頭文件:工程->設置(快捷鍵Alt+F7),選擇C/C++項precomplied Headers,設置如圖11

圖11 預編譯頭文件設置

9、編譯、連接、運行,結果如圖12。

圖11 運行結果

可以看出利用VC調用com組件的方式來調用matlab比較簡單,而且幾乎支持matlab所有的函數,在m文件較大、用matcom、調用math library或使用mcc方式無法實現的時候,推薦使用。需要說明的是,以上程序拷到另一台機器上是無法直接運行的,因為COM組件沒有新機器上注冊,如果要在另一台機器上使用的話,還需要打包安裝COM組件,並且由於本程序代碼很簡單,所以也就不提供源程序了,自己可以動手做一下。

本人正在寫一本關於VC和matlab接口方面的書,估計年底完稿,詳細介紹VC和matlab接口的幾種方法,並提供詳細的例子,例子都是我自己寫過的,歡迎大家提供些好的意見和建議。

我的QQ:44760299,

郵箱:[email protected]

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved