關於VC與VB調用matlab的exe文件.

前些天幫同學調試關於matlab的畢業設計,圖像處理的。具體的實現倒沒什麼,開始需要我幫忙的是在VC裏顯示MATLAB的處理結果。

我非常偷懶的想法是,直接用一個按鈕響應點擊事件,然後處理函數裏調exe.這樣有一個壞處是,其實跟VC沒什麼關係,之間也沒有交互。

下面是生成exe的參考

一、生成獨立可執行的程序(exe文件)步驟

    1、安裝編譯器。可有多種選擇,matlab自帶了一個LCC,推薦使用VC++6.0。
    2、設置編譯器。在matlab命令行輸入mbuild –setup以及mex –setup,選擇安裝的c編譯器。
    3、調用編譯器。此處使用MATLAB下的一個GUI平臺deploytool下完全實現。當然,也可以輸入mcc -m filaname, filaname爲要轉成exe的m文件;

     PS:我使用的就是mcc命令。這裏關於deploy使用都是說請看幫助,其實也沒什麼,就是新建一個deploy工程,在右邊會有讓引入主文件,和資源的窗口,把要生成EXE的.m文件引入,把要處理的圖片之類的資源引入,使用mcc命令即可。
注:在以前的版本中,用編譯命令mcc -B sglcpp filaname;自2006的版本後,替換爲mcc -mfilaname;
     4、安裝<matlab path>\toolbox\compiler\deploy\win32目錄下的MCRInstaller。

第四步的MCR是爲了在沒有matlab的電腦環境下運行,這一步我沒有細看。

生成EXE後在VC的按鈕響應函數裏調用

WinExec("xxx.exe",1)//參數是文件路徑名,與顯示方式。

後來同學的老師不滿意,並且要求VB,雖然我沒有用過VB而且這個要求很XX,可還是能幫就幫了。

具體如下:

單擊工程菜單——>部件——>部件對話框——>控件選項卡中選擇“Microsoft Windows Common Control6.0”點擊確定按鈕,如圖4.5。之後可以看到工具欄中增加了項目,將它從工具欄拖拽到設計界面中。 然後添加並設置所需要的功能的按鈕,進行工具欄的設計,如圖4.6

 

4.5添加“Microsoft Windows Common Control6.0”控件

Fig. 4.5 Add “Microsoft Windows Common Control6.0”control

對了,這裏可能會出現無法註冊的問題,使用管理員模式打開工程,使用瀏覽(B)去添加部件。

或者把.ocx文件拷貝到c:\windows\System32 然後運行cmd

使用命令

Regsvr32 C:\windows\system32\Mscomm32.ocx

 


4.6製作工具欄

Fig. 4.6 Make the toolbar


設計圖形顯示界面:

完成菜單欄,工具欄的創建以後,可以在窗體中創建兩個picture圖片框,在窗體上建立一大一小兩個水平排列的圖片框,左邊的圖片框(名稱:picture1)小一點,用來顯示待處理圖片,右邊的圖片框(名稱:picture2)大一點,用來顯示處理後的效果圖片。整個電弧圖像處理系統的界面完成圖如圖4.7所示。


4.7 界面完成圖

Fig. 4.7 The completed interface diagram

請輸入文件名後面是控件Text1

打開按鍵的點擊響應函數是

picname = Me.Text1.Text
<pre name="code" class="html"><p>Picture1.Picture = LoadPicture(App.Path & "\" & picname)</p>



如果路徑不對,可以使用絕對路徑,類似

Picture1.Picture = LoadPicture("F:\java\" & picname)

特別提醒一下,使用24位真彩以上的圖片讀不出來,VB只支持jpg,bmp格式,像png可以用圖畫打開後另存修改後綴。

爲工具欄上的各種實現電弧圖像處理的功能按鈕添加相應功能的代碼,實現VBMATLAB圖像處理程序的調用,對於選則某種功能按鈕實現相應功能

<pre name="code" class="vb">Private Sub Command1_Click()
Set matlab = CreateObject("matlab.application")
Dim matlab As Object
Clipboard.Clear
matlab.execute ("x=[1 2 4],y=[4 6 7];plot(x,y)")  '此處輸入matlab中命令
matlab.execute ("print -dbitmap;close")    '把所作圖以位圖形式保存在剪貼板中,並關閉
Me.Picture2.Picture = Clipboard.GetData()  '將剪貼板中圖像在image控件中顯示出來
End Sub




因爲同學電腦超慢,一點兒也不想改matlab生成EXE部分。這裏我用了一個笨方法,把處理的語句都放到
matlab.execute ()

時間與能力有限,有個問題沒解決,我想直接掉用

Shell "nouse1.exe  " 
並且能在VB裏截取matlab中圖像並關閉matlab.exe。如何處理,有想法的請指教。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章