vc和matlab的混合編程[自己的心得]

來源:互聯網
上載者:User

matlab真的是一個好東西,它的介紹我就不說啦,自己google去,matlab在數學處理、數位影像方面的研究有很好的應用,只是他在與其他例如vc,vb,java的接合上顯得比較的困難,似乎大家都在探討這方面的問題,經過這些天的猛看猛實驗,最終在matlab的COM接合上實現突破,並且正如matlab推薦的那樣,真的非常的方便和通用,幾乎可以處理所有的函數,包括圖形映像的處理函數。

一般來說,vc調用matlab混合編程有以下幾個途徑:

一、通過Matlab Engine方式
  Matlab Engine是指一組Matlab提供的介面函數,支援C語言, Matlab Engine採用C/S(客戶機/伺服器)模式,Matlab作為後台伺服器,而C程式作為前台客戶機,通過Windows的動態控制項與伺服器通訊,向Matlab Engine傳遞命令和資料資訊,從Matlab Engine接受資料資訊。使用者可以在前台應用程式中調用這些介面函數,實現對Matlab Engine的控制。採用這種方法幾乎能利用Matlab全部功能,但是需要在機器上安裝Matlab軟體,而且執行效率低,因此在實際應用中不採用這種方法,在軟體開發中也不可行,我認為適合個人使用或做示範用,因此不打算介紹。

二、直接調用Matlab的C/C++數學函數庫
  Matlab中提供了可以供C/C++語言調用的C/C++數學函數庫,其中包含了大量用C\C++語言重新編寫的Matlab數學函數,這些函數涉及到線形代數、數值分析、傅立葉變換、多項式計算、解微分方程等,並且函數庫中提供了大量各種矩陣操作函數,在VC中可以直接使用這些函數,通過這些函數可以在VC中方便的實現在Matlab中矩陣運算功能。可以看出用這種方法可以很靈活的調用Matlab來編寫應用程式,但要求讀者對C\C++語言比較熟悉,可以看出使用這種方法調用Matlab的工具箱函數有很大困難。適合對C\C++語言比較熟悉的使用者使用,

三、用Matlab內建的Matlab Compiler
  Matlab Compiler的作用是將m檔案轉化成C/C++代碼(也就是通常所用的mcc命令),這種原始碼需要用C/C++編譯器編譯串連成獨立應用程式,在將m檔案轉成獨立應用程式的過程中產生的C/C++檔案,原則上是可以被其它的C/C++代碼調用的,編譯器可以通過設定mcc命令的選項,將m檔案編譯成動態連結程式庫檔案、C/C++檔案、可執行檔等一系列檔案。到matlab R21.1為止,Matlab Compiler的m程式轉換成C/C++代碼功能有很多限制:

  1. 不能轉換指令碼m檔案,只能轉換m函數;
  2. 不能使用matlab對象;
  3. 不能用input或者eval操作matlab空間變數;
  4. 不能動態地命名變數,然後用load或者save命令來操作;
  5. 不能處理具有嵌套調用其他m檔案的m檔案;
  6. 不能使用MATLAB內嵌函式;

四、使用matlab的combuilde工具
   COM是component object module的簡稱,它是一種通用的對象介面,任何語言只要按照這種介面標準,就可以實現調用它。matlab6.5新推出來的combuilder就是把用matlab編寫的程式做成com組件,供其他語言調用。該方法實現簡單,通用性強,而且幾乎可以使用Matlab的任何函數(注意:不支援指令檔,指令檔使用時要改為函數檔案),因此在程式較大、調用工具箱函數或調用函數較多時推薦使用,這也是Matlab公司(Matlab公司就是Mathworks公司)推薦的使用方法。

五、使用matcom工具。
  這是個第三方控制項,很小(8M多),原本屬於mathtool公司,後來被Mathworks公司合并了,使用該工具可以將m指令檔和m函數轉化成相同功能的C\C++檔案,相比其它方法使用matcom具有如下優點:

  1. 轉換過程簡單(由matcom工具自動實現),容易實現;
  2. 可以方便的產生動態連結程式庫檔案(dll)和可執行檔(exe);
  3. 不僅可以轉換獨立的指令檔,也可以轉換嵌套指令檔;
  4. 設定環境後,可以使用Matlab的工具箱函數;

但matcom也有以下不足:

  1. 對struct等類的支援有缺陷,對class資料類型;
  2. 部分繪圖語句無法實現或得不到準確圖象,尤其是三維圖象;

因此在不涉及到三維做圖以及m檔案不大的情況下推薦使用。

以上方法,我試用了matcom方式、matlab combuilder方式,因為我的vc程式要脫離matlab執行,所以就沒有考慮前幾種方式。首先對於matcom方式,可能是因為被matlab收購了,最高版本是4.5,支援的api也不多,我實驗了好多次都因為編譯中出現莫名其妙的錯誤,沒有達到我想要的效果,最終放棄了。後來看到vckbase 上鄧科寫的有關matlab和vc混合編程的一系列文章,最終選擇了combuilder,具體方法也可以看鄧科的這一篇淺析VC與Matlab聯合編程<三>,對於combuilder模式編程有非常直觀的講解,具體可以看這一篇,我在這裡只是說一下要注意的地方。

1,要被添加進入com的m函數中調用的其他m也需要加入到m檔案的目錄裡面或者是matlab combuilder可以尋找目錄

2,combuilder編譯的資訊千萬不能放過,似乎有一個warning都可能是有問題的,我就是這樣,完美結果是編譯log沒有warning和error。

3,在將m檔案加入到com中前最好先在matlab中執行測試一遍
轉自http://wordpad.blog.sohu.com/45476912.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.