亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JAVA、VC++和MATLAB的混合編程應用

系統 1985 0
東南大學機械工程系 陳永洲
在INTERNET/INTRANET網絡通信技術的迅猛發展的今天,分布式異構集成應用系統的開發和使用是必然發展方向;JAVA具有穩定、可靠、跨平臺等優點,利用其開發分布式計算系統,是必然的趨勢。同時,
JAVA開發必須繼承并集成現存的系統,因此,JAVA與各現存的軟件系統通信現在已經提上了日程。

MATLAB是Mathworks公司推出的針對數值計算的交互式軟件,具有強大的數值分析、矩陣運算、信號處理和圖形顯示功能;MATLAB以其強大的數據處理能力和豐富的工具箱使得他的編程極為簡單,可大幅縮短應用程序開發周期,提高編程效率。因而JAVA通過VC++實現MATLAB的圖形處理和顯示是提高效率的一種可行策略。最終實現JAVA、MATLAB通信必須解決兩方面的問題:一是JAVA與VC++的通信;二是VC++與MATLAB的通信。

本系統(是分布式網絡多代理系統中的一代理服務器——人工神經網絡代理服務器)的功能實現是:從JBUILDER開發環境的JAVA程序通過調用包含MATLAB圖形處理和顯示功能DLL,實現圖像顯示。其中VC需要MATLAB的“title.m、xlabel.m、ylabel.m”三個文件和為實現圖形處理顯示編寫的文件“errorpicture.m”。系統的開發環境是:WindowXP操作系統、VisualC++6.0和JBUILDER6.0開發工具、MATLAB6.5軟件。

1 實現JAVA與VC通信方法簡介

JAVA與VC的交互可以通過各自單獨運行的程序讀寫約定的格式的文件來交流,但是通信的實時性不能保證;可以利用CORBA機制,通過定義IDL接口的客戶機/服務器(CLIENT/SERVER)的形式通訊,這加大了系統簡單功能實現的復雜化;還可以通過JNI(Java Native Interface)或RMI(Remote Method Invo ca tion)等方法實現。

微軟 的操作系統上,實現本機程序之間的通信應用JNI機制較方便快捷、穩定可靠,并能實現實時通信。本示例系統的實現就使用了此機制。

1.1 實現JAVA與VC++(DLL)互連

首先在JBUILDER中建立一工程,如:MASS,使用MASSFrame為框架(Frame)的類名。

系統為了使用VC中實現的MATLAB圖形處理的DLL,需在JAVA文件的class MASSFrame中,添加如下一些代碼:

public native void showPicture();

//實現調用的DLL中函數申明

static

{

System.loadLibrary ("showpicture");

//使用DLL文件,其名稱是“showpicture.dll”

}

void jBShowPicture_actionPerformed(ActionEvent e)

{

showPicture();

//JAVA程序對DLL中函數的使用

}

1.2 系統運行設置與編譯

須對使用DLL中MATLAB函數的JAVA文件編譯屬性進行設置,在JBUILDER工具中的Project視圖區域找到class MASSFrame.java(各開發者確定的文件名可能不同)的文件,選中后按下鼠標右鍵,在出現的菜單中選擇“Properties”項,接著按照“Build->RMI/JNI->Generate JNI header file”找到“Generate JNI header file”項目,選定。編譯該文件,可得相應的h文件。本系統產生“mass_ MASSFrame.h”,其中調用的函數為:“JNIEXPORT void JNICALL Java_mass_MASSFrame_showPicture (JNIEnv *, jobject); ”。

如果僅使用 SUN 公司的JDK來實現,須用javah.exe將javac.exe編譯生成的class文件去生成對應的h文件,接著修改h文件,即將文件所在的包層次,在被調用的函數名上體現出來,也就是“JNIEXPORT void JNICALL Java_MASSFrame_showPicture (JNIEnv *, jobject); ”修改為上面的調用函數名。

1.3 JAVA應用系統運行

將VC生成的DLL文件拷到JBUILDER當前運行程序的目錄下,執行程序,就實現JAVA系統和MATLAB的通信。本示例系統的DLL是“showpicture.dll” (即下面的“實現VC、MATLAB通信方法簡介”所產生的)。其運行結果顯示圖如圖1:

圖1 JAVA調用DLL的圖像顯示

2 實現VC、MATLAB通信方法簡介

MATLAB提供了許多方法與VC程序的通信:MATLAB引擎(ENGINE)模式,采用了客戶機/服務器(CLIENT/SERVER)的計算形式,通過MATLAB應用程序接口(API)中有關函數,在VC環境中調用MATLAB函數,但此種方法需要MATLAB環境后臺支持,因此系統必須安裝MATLAB;MATLAB本身提供的MCC工具編譯,編譯m文件生成VC++或c語言,直接在VC中使用;MATLAB的MEX工具將m文件編譯成DLL,供VC調用。。。。。。

MATLAB現具有的MATLAB Add—in(其包裝了MCC、MEX)更方便了第二、三種方法的應用,現本系統的實現就是以第三種為基礎的。

2.1 MATLAB與VC實現互連

為了在開發時實現對MATLAB的具體功能的調用,應首先在操作系統中安裝MATLAB工具軟件,之后并運行此工具軟件,依次執行“mex –setup;mbuild –setup;cd (p refdir); mccsavepath;”命令。之后運行VC開發工具,從VC++菜單中依次打開“Tools->Customize->Add-ins and Macro Files”,選中MATLAB Add—in宏,可以看到工具欄中多了一個

。現在VC就可以利用它來得到m文件所對應的c、c++文件。

2.2 開發工具VC運行環境設置

開發時,須對VC的開發環境變量進行設置。通過“Tools->Options->Directories”找到的“Directories”項中添加環境變量。

添加頭文件和庫文件搜索路徑有(本計算機的文件搜索路徑為):

F:/MATLAB6P5/EXTERN/INCLUDE

F:/MATLAB6P5/EXTERN/INCLUDE/CPP

同時將MATLAB的鏈接庫添加到VC中。從“Tools->Options->Directories”中“Show directories for:”下拉框里選擇“Library files”,然后再在“Directories”項中添加環境變量。

F:/MATLAB6P5/EXTERN/LIB

F:/MATLAB6P5/EXTERN/LIB/WIN32

F:/MATLAB6P5/EXTERN/LIB/WIN32/MICROSOFT/MSVC60

上述為VC編譯MATLAB的m文件生成C代碼的環境。同時為了編譯JNI的h文件,還須通過菜單Tools.和Project添加如下頭文件和庫文件搜索路徑:

D:/JBUILDER6/JDK1.3.1/INCLUDE

D:/JBUILDER6/JDK1.3.1/INCLUDE/WIN32

2.4 VC生成DLL

本系統首先用VC建立“MATLAB Project Wizard”項中名稱為showpicture的Project,其中Project的選項結果如下圖2所示:

圖2 創建工程選項結果

將1.2中生成的mass_ MASSFrame.h文件拷貝到系統目錄下,并添加到VC的“FileView”中“HeadFiles”里面。

在VC中為了對JAVA程序提供可調用的函數,須在“showpicture.c”文件中添加:

#include " mass_ MASSFrame.h"

//dll導出的JAVA調用函數的具體實現部分

JNIEXPORT void JNICALL

Java_mass_MASSFrame_showPicture

(JNIEnv *en, jobject ob)

{

showpictureInitialize();//初始化

mlfErrorpicture();//圖像顯示

mlfHGWaitForFiguresToDie();//關閉顯示相關資源

}

“F7”編譯程序,于是便得到“showpicture.dll”。

2.3 脫離MATLAB環境運行的支持文件

為了在沒有安裝MATLAB應用軟件的環境下,能夠使用其功能的DLL,須在運行此DLL的目錄中添加一些文件,而這些文件可以通過工具欄中的“MATLAB Add-in Packager”獲得。按照此工具默認的配置運行,得到一個zip壓縮文件,使用時,將其解壓到DLL文件所在的目錄中,DLL就能脫離MATLAB環境使用。

3 結論

采用JAVA系統在對外服務時,利用MATLAB完成軟件核心算法設計和圖形處理、顯示,很大程度上降低了編程難度和工作量, 縮短開發周期,并提高了軟件的可靠性。基于VC++6.0實現JAVA和MATLAB的通信——利用VC編譯器調用包含MATLAB處理功能的動態連接庫實現脫離MATLAB環境下運行實現JAVA和MATLAB二者的緊密結合,更極大拓展了MATLAB的應用范圍,并同時也深化了JAVA和MATLAB的應用能力。

附注:errorpicture.m文件的內容如下:

function errorpicture()

s='NN/訓練誤差結果顯示.txt';

fid=fopen(s,'r');

while (feof(fid))~=true

[x,n]=fscanf(fid,'%12f');

end;

if(n>1)

t=1:1*100:n*100;

plot(t,x);

ylabel('誤差絕對值');

xlabel('訓練次數(次)');

title('人工神經網絡訓練誤差結果顯示圖');

grid;

end;

fclose(fid);

JAVA、VC++和MATLAB的混合編程應用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人拍精品视频网 | 亚洲激情在线播放 | 国产九九热 | 九九99在线视频 | 欧美色图片区 | 国内精品久久久久影院亚洲 | 国产成人精品午夜 | 亚洲欧美色综合精品 | 天天色天天射综合网 | 久久国产亚洲欧美日韩精品 | 欧美精品久久久久久久小说 | 全部在线播放免费毛片 | 亚洲九九香蕉 | 国产美女a做受大片在线观看 | 免费一级a毛片 | 成人一级片在线观看 | 交专区videossex另类 | 亚洲视频中文字幕在线 | 奇米影视777777 | 久久高清影院 | 中文字幕国产欧美 | 国产欧美日韩精品a在线观看 | 欧美性xxx免费看片 欧美性白人顶级hd 欧美性插视频 | 91福利精品老师国产自产在线 | 尤物视频黄 | 26uuu欧美| 九九伊人网| 深夜你懂的在线网址入口 | 激情午夜婷婷 | 豆国产97在线 | 中国 | 色婷亚洲 | 午夜美女久久久久爽久久 | 午夜不卡视频 | 最新国产精品精品视频 | 四虎影视最新网站在线播放 | 欧美日韩在线观看免费 | 蘑菇视频绿巨人小黄鸭 | 亚洲精品美女久久久久99 | 黄色 ed2k| 日本一级在线播放线观看免 | 久久综合亚洲一区二区三区 |