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

淺析VC與Matlab聯合編程<三>

作者:鄧科

  在“淺析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]
 
發佈了23 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章