二次開(kāi)發(fā)應(yīng)用框架_第1頁(yè)
二次開(kāi)發(fā)應(yīng)用框架_第2頁(yè)
二次開(kāi)發(fā)應(yīng)用框架_第3頁(yè)
二次開(kāi)發(fā)應(yīng)用框架_第4頁(yè)
二次開(kāi)發(fā)應(yīng)用框架_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第2章 二次開(kāi)發(fā)應(yīng)用框架2.1二次開(kāi)發(fā)工程項(xiàng)目的創(chuàng)建二次開(kāi)發(fā)工程的創(chuàng)建常用有3種:UG/Open AppWizard、Win32應(yīng)用程序向?qū)Ш蚆FC應(yīng)用程序向?qū)?。UG應(yīng)用開(kāi)發(fā)程序采用了動(dòng)態(tài)鏈接庫(kù)(DLL,Dynamic Link Library)技術(shù),使用上述任何一種應(yīng)用向?qū)ч_(kāi)發(fā)程序,最終生成的結(jié)果都是DLL文件,提供UG進(jìn)程加載。UG內(nèi)部應(yīng)用程序開(kāi)發(fā)規(guī)定以動(dòng)態(tài)鏈接庫(kù)方式對(duì)其進(jìn)行功能擴(kuò)展和應(yīng)用開(kāi)發(fā)。動(dòng)態(tài)鏈接庫(kù)被映射到其他應(yīng)用程序空間中執(zhí)行,與鏈接它的應(yīng)用程序可以看成是一體的。在Visual S中將應(yīng)用程序編譯鏈接生成動(dòng)態(tài)鏈接庫(kù)文件(后綴名為.dll),UG啟動(dòng)時(shí)會(huì)自動(dòng)加載動(dòng)態(tài)

2、鏈接庫(kù)文件供用戶(hù)調(diào)用,從而實(shí)現(xiàn)了應(yīng)用開(kāi)發(fā)程序與UG平臺(tái)的無(wú)縫集成。1、利用UG/Open AppWizard向?qū)?.4節(jié)已經(jīng)詳細(xì)介紹了使用UG/Open APPwizard 創(chuàng)建一個(gè)簡(jiǎn)單的First Project程序。該向?qū)荱G軟件本身提供的應(yīng)用向?qū)ВS著UG版本和開(kāi)發(fā)環(huán)境的升級(jí)而升級(jí)。該向?qū)Р僮骱?jiǎn)便,運(yùn)行穩(wěn)定,可以快速構(gòu)建開(kāi)發(fā)體系,但通常不支持MFC類(lèi)庫(kù),因此常常應(yīng)用于輔助工具的開(kāi)發(fā)。2、利用Win32應(yīng)用程序向?qū)В―LL)應(yīng)用開(kāi)發(fā)程序框架還可以采用Win32 DLL向?qū)?chuàng)建。Win32 DLL向?qū)?chuàng)建Windows常規(guī)DLL,它只能導(dǎo)出C樣式函數(shù),不能導(dǎo)出C+類(lèi)、成員函數(shù)和重載函數(shù),同

3、UG/Open AppWizard向?qū)?chuàng)建工程項(xiàng)目一樣不支持 MFC。利用Win32應(yīng)用程序向?qū)?chuàng)建工程項(xiàng)目,包括兩個(gè)步驟:新建項(xiàng)目和設(shè)置項(xiàng)目屬性。步驟一:新建項(xiàng)目打開(kāi)Visual Studio.NET,選擇新建項(xiàng)目菜單項(xiàng),將顯示如圖2-5所示的新建項(xiàng)目對(duì)話(huà)框。在項(xiàng)目類(lèi)型框中選擇Visual C+項(xiàng)目下的Win32選項(xiàng),在模板框中選擇Win32 項(xiàng)目選項(xiàng),在名稱(chēng)框中輸入項(xiàng)目名稱(chēng),在位置框中設(shè)置合適的路徑,單擊確定按鈕接受輸入。圖2-5 新建項(xiàng)目對(duì)話(huà)框這時(shí)將顯示如圖2-6所示的Win32應(yīng)用程序向?qū)FSolution對(duì)話(huà)框,選擇應(yīng)用程序設(shè)置屬性頁(yè),在其中選擇Dll,直接單擊完成按鈕建立新項(xiàng)目。

4、圖2-6 Win32應(yīng)用程序向?qū)FSolution對(duì)話(huà)框新建的項(xiàng)目中將會(huì)有一些向?qū)J(rèn)添加的文件,如圖2-7所示。圖中列出了新建項(xiàng)目中已有的文件。圖2-7解決方案資源管理器圖步驟二:設(shè)置項(xiàng)目屬性選擇項(xiàng)目菜單下的屬性項(xiàng),將顯示如圖2-8所示的UFSolution屬性頁(yè)。圖2-8項(xiàng)目屬性頁(yè)常規(guī)在圖2-8中要確認(rèn)項(xiàng)目默認(rèn)值框中配置類(lèi)型為動(dòng)態(tài)庫(kù)(.dll),然后,選擇調(diào)試選項(xiàng),將顯示圖2-9。在圖2-9中,將操作框中的命令項(xiàng)設(shè)置為系統(tǒng)中的UG執(zhí)行文件,即ugraf.exe,設(shè)置這一項(xiàng)的目的是為了便于程序的調(diào)試。圖2-9 項(xiàng)目屬性頁(yè)調(diào)試接下來(lái),選擇C/C+項(xiàng)中的常規(guī)選項(xiàng),將附加包含目錄設(shè)置為$UGII

5、_BASE_DIRUGOPENPP; $UGII_BASE_DIRUGOPEN,如圖2-10所示。設(shè)置這一項(xiàng)的目的是為了包含UF的一些頭文件。圖2-10 項(xiàng)目屬性頁(yè)C/C+常規(guī)選擇C/C+項(xiàng)中的代碼生成選項(xiàng),將運(yùn)行庫(kù)設(shè)置為多線(xiàn)程調(diào)試 DLL (/MDd),如圖2-11所示。圖2-11 項(xiàng)目屬性頁(yè)C/C+代碼生成選擇鏈接器項(xiàng)中的常規(guī)選項(xiàng),設(shè)置輸出文件,將附加庫(kù)目錄設(shè)置為$UGII_BASE_DIRUGOPEN; $UGII_BASE_DIRUGOPENPP,如圖2-12所示。圖2-12 項(xiàng)目屬性頁(yè)鏈接器常規(guī)選擇鏈接器項(xiàng)中的輸入選項(xiàng),設(shè)置附加依賴(lài)項(xiàng)為libufun.lib libugopenint

6、.lib。這兩個(gè)文件是在進(jìn)行UG二次開(kāi)發(fā)時(shí)必需的庫(kù)載入文件,如圖2-13所示。圖2-13 項(xiàng)目屬性頁(yè)鏈接器輸入設(shè)置好以上選項(xiàng)后,按應(yīng)用按鈕,將所設(shè)置的屬性應(yīng)用于項(xiàng)目。(3)利用MFC應(yīng)用程序向?qū)В―LL)UG應(yīng)用程序項(xiàng)目也可以利用MFC應(yīng)用程序向?qū)В―LL)創(chuàng)建。UG應(yīng)用程序開(kāi)發(fā)可以方便地調(diào)用MFC類(lèi)庫(kù)中的資源,豐富應(yīng)用程序界面。項(xiàng)目創(chuàng)建過(guò)程與Win32應(yīng)用程序向?qū)В―LL)項(xiàng)目創(chuàng)建過(guò)程基本相同。同流行的windows應(yīng)用程序開(kāi)發(fā)工具相比,UG/Open提供的工具及對(duì)話(huà)框所包含的控件較少,功能有限,因此界面開(kāi)發(fā)在一定程度上受到限制,有的功能甚至難以實(shí)現(xiàn)。為了避免這個(gè)缺陷,可以采用 MFC應(yīng)用向

7、導(dǎo)( MFC Appwizard )建立系統(tǒng)框架,在該框架下可以方便地調(diào)用MFC類(lèi)庫(kù)中的資源。MFC( Microsoft Foundation Class )類(lèi)庫(kù)是 Windows下C+編程使用最廣泛的類(lèi)庫(kù)。MFC封裝了WIN32 API函數(shù),并設(shè)計(jì)了一套方便的消息映射機(jī)制。Visual C+及其MFC的界面靈活性和表達(dá)能力均優(yōu)于UIstyler 的功能。有效靈活的MFC框架結(jié)構(gòu)大大方便了開(kāi)發(fā)者的編程工作,達(dá)到事半功倍的效果。在UG開(kāi)發(fā)中使用MFC庫(kù),一般調(diào)用的是 MFC42.DLL 庫(kù)( MFC 核心類(lèi)庫(kù))。由于不能保證用戶(hù)機(jī)器都安裝了MFC類(lèi)庫(kù),所以在編譯時(shí)應(yīng)靜態(tài)鏈接到MFC庫(kù),此時(shí)DL

8、L文件包含所有需要的MFC代碼的一份拷貝,即成為自包含的庫(kù)。與動(dòng)態(tài)鏈接到MFC方式相比,靜態(tài)方式創(chuàng)建的DLL文件占用了更多空間,但確保了DLL在不同目標(biāo)機(jī)器上的正確運(yùn)行。當(dāng)UG執(zhí)行用戶(hù)的開(kāi)發(fā)程序時(shí)會(huì)把MFC42.DLL 作為進(jìn)程的一部分裝入。 MFC42.DLL 把數(shù)據(jù)存放在一些可靠的全局變量?jī)?nèi)。由于在正規(guī)的MFC DLL中調(diào)用MFC42.DLL時(shí),全局變量可能會(huì)不同步而導(dǎo)致編譯出錯(cuò),所以應(yīng)在 User Exit 函數(shù)的開(kāi)頭插入宏語(yǔ)句:AFX_MANAGE_STATE ( AfxGetstaticModuleState() );2.2應(yīng)用程序框架2.2.1 程序的組成UG/Open API 應(yīng)

9、用程序一般包括菜單、對(duì)話(huà)框、應(yīng)用程序(DLL)和UG/Open API庫(kù)函數(shù)四部分,其中菜單和對(duì)話(huà)框是程序與用戶(hù)交互的工具,從菜單可以啟動(dòng)應(yīng)用程序、對(duì)話(huà)框等,在對(duì)話(huà)框激活控件時(shí),將調(diào)用相應(yīng)的回調(diào)函數(shù),應(yīng)用程序(回調(diào)函數(shù))用基本的C/C+語(yǔ)言和的庫(kù)函數(shù)編碼。菜單:UG/Open提供了菜單開(kāi)發(fā)工具M(jìn)enuScript,它提供用戶(hù)創(chuàng)建并編輯UG的下拉菜單及工具條。菜單文件擴(kuò)展名為.men,工具條文件擴(kuò)展名為.tbr,這兩類(lèi)文件放在應(yīng)用程序目錄的startup子目錄中。對(duì)話(huà)框:UG/Open UIStyler模塊提供了強(qiáng)大的制作UG風(fēng)格窗口的功能。對(duì)話(huà)框文件擴(kuò)展名為.dlg,這類(lèi)文件放在程序目錄的ap

10、plication子目錄中。應(yīng)用程序(回調(diào)函數(shù)):C/C+語(yǔ)言程序,在C/C+集成開(kāi)發(fā)環(huán)境中創(chuàng)建、編譯連接并運(yùn)行,生成.dll文件,放在程序目錄的startup或udo子目錄中。UG/Open API庫(kù)函數(shù):默認(rèn)存放在“$UGII_BASE_DIRugopen”目錄中。在創(chuàng)建應(yīng)用程序時(shí)需要配置。應(yīng)用程序開(kāi)發(fā)流程如圖2-14所示。圖2-14 UG/Open API應(yīng)用程序開(kāi)發(fā)流程2.2.2 工程目錄結(jié)構(gòu)在用戶(hù)設(shè)定的工程路徑下需要建立 UG 系統(tǒng)規(guī)定的工程目錄結(jié)構(gòu)。 UG 啟動(dòng)時(shí)會(huì)在規(guī)定目錄中尋找并加載相應(yīng)的程序和資源。UG規(guī)定的目錄有 startup、application 和Udo。UG對(duì)它們

11、存放的文件做了如下的規(guī)定: ( 1 ) Startup 目錄存放UG啟動(dòng)時(shí)需加載的動(dòng)態(tài)鏈接庫(kù)文件(*.dll)、菜單腳本文件( *.men)和用戶(hù)工具欄腳本文件(*.tbr)。 ( 2 ) Apphcation 目錄存放具體的功能擴(kuò)展程序文件,如UIstyler 對(duì)話(huà)框文件(*.dlg)、工具圖標(biāo)文件(*.bmp )和位圖調(diào)色板文件(*.ubm )。( 3 ) Udo目錄存放用戶(hù)定義的數(shù)據(jù)和鏈接等。考慮到項(xiàng)目開(kāi)發(fā)的需要和文檔的完整性,除了UG系統(tǒng)規(guī)定的目錄外,還需要建立一些自定義目錄(僅供參考)。這些目錄有 Code、Configure 和Document。這些目錄中存放的文件類(lèi)型有如下規(guī)定:

12、 ( 1 ) Code目錄存放具體的程序代碼,該目錄在新建工程時(shí)創(chuàng)建。( 2 ) Configure目錄存放開(kāi)發(fā)中所必需的配置文件,如文本文件(*.txt)、自定義配置文件(*.cfg)和電子表格 Excel文件(*.xls )等。Configure目錄的名稱(chēng)可以根據(jù)具體的編程需要由開(kāi)發(fā)者選定,例如 Excel、Temp等。( 3 ) Document 目錄存放用戶(hù)的文檔文件,如視頻演示文件(*.avi)、安裝使用說(shuō)明書(shū)(*.doc)和軟件開(kāi)發(fā)說(shuō)明書(shū)(*.doc)等。圖 2-25 所示給出了一個(gè)應(yīng)用開(kāi)發(fā)程序的目錄結(jié)構(gòu),開(kāi)發(fā)者可以根據(jù)實(shí)際情況做適當(dāng)調(diào)整。圖2-14 工程目錄結(jié)構(gòu)2.3工程路徑設(shè)置

13、工程路徑是指安裝在目標(biāo)硬盤(pán)的用戶(hù)工程的路徑,工程路徑設(shè)置的目的是讓UG軟件在啟動(dòng)運(yùn)行時(shí)能找到應(yīng)用程序的物理位置,自動(dòng)加載應(yīng)用程序。例如,1.4節(jié)實(shí)例的工程路徑是E:ucocs。工程路徑下至少存在UG規(guī)定的資源文件夾Startup和Application,用戶(hù)可以將相關(guān)的資源文件放入這些文件夾中。注冊(cè)工程路徑有兩種方法:配置文件法和環(huán)境變量法。2.4.1 配置文件法在默認(rèn)情況下,UG規(guī)定了配置文件custom_dirs.dat用于指明用戶(hù)的工程路徑,該文件位于路徑“$UGII_BASE_DIRugiimenus”。當(dāng)UG啟動(dòng)時(shí),系統(tǒng)檢查該文件中注冊(cè)的工程路徑并自動(dòng)加載該路徑下的所有資源,包括用戶(hù)

14、菜單、對(duì)話(huà)框和動(dòng)態(tài)鏈接庫(kù)等。配置文件custom_dirs . dat 的基本語(yǔ)法如下:( 1 ) 文件中允許使用注釋?zhuān)⑨屖且宰⑨尫?”開(kāi)頭的一行文字。( 2 ) 每一行只能寫(xiě)一條工程路徑,要確保路徑的正確。( 3 ) custom_dirs.dat允許添加多個(gè)文件路徑,UG在啟動(dòng)時(shí)將按照先后順序依次載入。1.4節(jié)的實(shí)例采用修改配置文件法注冊(cè)工程路徑,該方法操作簡(jiǎn)便,并且可以同時(shí)載入多個(gè)工程,因此得到廣泛使用。值得注意的是,在多工程載入的情況下,應(yīng)避免工程間DLL文件重名的情況發(fā)生。如果發(fā)生重名,系統(tǒng)會(huì)認(rèn)為是重復(fù)注冊(cè)現(xiàn)象,并且只載入注冊(cè)靠前的工程而忽略其他的工程。例如,custom_dir

15、s.dat按照先后順序注冊(cè)了兩個(gè)工程路徑Path1和 Path2,但它們的 DLL 文件名稱(chēng)相同。此時(shí)無(wú)論激發(fā)哪個(gè)工程,都將執(zhí)行路徑 Path1下的工程應(yīng)用。2.4.2 修改環(huán)境變量法UG 環(huán)境配置文件ugii_env.dat 中存在3個(gè)用于注冊(cè)工程路徑的環(huán)境變量,如表2-1所示。去掉環(huán)境變量前的注釋符“#,在等號(hào)后寫(xiě)入具體的工程路徑,則在 UG 啟動(dòng)的同時(shí)會(huì)將這些環(huán)境變量所指定的工程路徑中的資源按照優(yōu)先級(jí)的順序加載。注冊(cè)工程路徑的環(huán)境變量環(huán)境變量名工程路徑優(yōu)先級(jí)UG_VENDOR_DIR存放 UG 指定開(kāi)發(fā)商應(yīng)用開(kāi)發(fā)產(chǎn)品的工程路徑最高UG_SITE_DIR存放其余開(kāi)發(fā)商應(yīng)用開(kāi)發(fā)產(chǎn)品的工程路徑

16、其次UG_USER_DIR存放用戶(hù)自己應(yīng)用開(kāi)發(fā)產(chǎn)品的工程路徑最低下面在1. 4節(jié)的實(shí)例中使用修改環(huán)境變量法來(lái)注冊(cè)工程路徑。 ( 1 )取消原有注冊(cè)。打開(kāi)文件custom_dirs.dat,刪除或注釋掉工程路徑E:ucocs(在路徑前加上“# )并保存文件。此時(shí)打開(kāi)UG將找不到工程的菜單命令。 ( 2 )修改ugii_env.dat中UG_SITE_DIR 的值為“UG_SITE_DIR= E:ucocs”并保存文件。注意,語(yǔ)句前不能有注釋符“#”。此時(shí)打開(kāi)UG,將恢復(fù) FileNew 工程的使用。2.4 UG/Open API運(yùn)行模式利用UG/Open API編寫(xiě)的程序源代碼并不能被UG直接執(zhí)

17、行,它和C/C+ 程序一樣必須通過(guò)編譯形成動(dòng)態(tài)鏈接庫(kù)或可執(zhí)行文件后才能發(fā)揮作用。UG/Open API程序可以在兩種不同的環(huán)境下(內(nèi)部和外部?jī)煞N模式)運(yùn)行,這取決于程序的連接方式。2.4.1 內(nèi)部模式內(nèi)部模式(Internal開(kāi)發(fā)模式)的程序只能在UG的界面環(huán)境下運(yùn)行。在運(yùn)行內(nèi)部程序時(shí),它們以 .dll (動(dòng)態(tài)鏈接庫(kù))的方式被調(diào)到UG的進(jìn)程空間中。內(nèi)部程序有下列特點(diǎn):執(zhí)行代碼小,連接快;內(nèi)部程序一旦被加載到內(nèi)存中,只能通過(guò)UG/Open API的卸載功能才能從UG運(yùn)行功能中卸載它;運(yùn)行結(jié)果在UG的界面圖形環(huán)境中可見(jiàn);入口函數(shù)是ufusr或ufsta;最大的優(yōu)點(diǎn)是能處理UG的UI的對(duì)象接口,實(shí)現(xiàn)

18、和UG界面的無(wú)縫集成并能擴(kuò)充UG的特定功能,而且它執(zhí)行時(shí)每個(gè)步驟都能從UG的客戶(hù)窗口得到動(dòng)態(tài)反映,因此能方便的通過(guò)UI界面對(duì)象來(lái)實(shí)現(xiàn)與用戶(hù)的交互、屏幕選取等復(fù)雜操作。內(nèi)部程序是以動(dòng)態(tài)鏈接庫(kù)的形式創(chuàng)建并編譯的。它必須啟動(dòng)UG/gateway才能運(yùn)行。內(nèi)部模式的應(yīng)用程序,可以通過(guò)下列幾種方式執(zhí)行:l 直接激活方式該方式不用設(shè)置環(huán)境變量,程序編譯連接后即可執(zhí)行。在UG環(huán)境中選擇菜單:File- Execute-NX Open,將出現(xiàn)一個(gè)文件打開(kāi)對(duì)話(huà)框,選取相應(yīng)應(yīng)用程序(.dll)即可。l 用戶(hù)菜單調(diào)用方式使用該方式必須設(shè)置環(huán)境變量UG_USER_DIR,將環(huán)境變量UG_USER_DIR指向應(yīng)用程序主

19、目錄,將應(yīng)用程序(.dll)放置到主目錄的$UGII_USER_DIRapplication或$UGII_USER_DIRstartup子目錄下。l UIStyler 回調(diào)函數(shù)方式由UIStyler創(chuàng)建的對(duì)話(huà)框回調(diào)函數(shù)中激活應(yīng)用程序(.dll)l 通過(guò)用戶(hù)出口根據(jù)用戶(hù)出口不同,設(shè)置相應(yīng)的環(huán)境變量,激活對(duì)應(yīng)入口函數(shù)應(yīng)用程序.dll。內(nèi)部程序的一般格式如下:#include /* Prototypes exist in this file.*/void ufusr( )/*申明變量*/UF_initiialize();/*用戶(hù)代碼*/UF_terminate();2.4.2 外部模式外部模式下的程

20、序可以在操作系統(tǒng)下運(yùn)行,不必在UG環(huán)境中作為UG 的子程序運(yùn)行。外部程序是可執(zhí)行程序,運(yùn)行時(shí)只要有UG License 的支持,就可以由操作系統(tǒng)直接執(zhí)行,不需要啟動(dòng)UG/Gateway。它的優(yōu)點(diǎn)是不必啟動(dòng)UG,屬于后臺(tái)執(zhí)行,這樣可以節(jié)約運(yùn)行時(shí)間,其缺點(diǎn)在于它不能和UG/Gateway發(fā)生聯(lián)系,因而不能利用UG的顯示窗口動(dòng)態(tài)反饋操作結(jié)果,同時(shí)也不能實(shí)現(xiàn)一些用戶(hù)的交互操作和管理或控制出圖,所以它一般用于part 零件文件大量創(chuàng)建,而不適用于用戶(hù)交互性的幾何建模和修改、存取外部程序在操作系統(tǒng)平臺(tái)的命令行直接執(zhí)行即可。外部程序的一般格式如下:#include /*頭文件*/int main(int a

21、rgc, char* argv)/*申明變量*/UF_initiialize();/*用戶(hù)代碼*/UF_terminate();2.5 程序的初始化及終止所有UG/Open API程序的使用,必須及時(shí)進(jìn)行初始化和終止,以確保獲取或釋放UG/open API的執(zhí)行許可權(quán)限。在調(diào)用UG/Open API的函數(shù)前,應(yīng)先調(diào)用 UF_initialize()來(lái)獲得執(zhí)行許可權(quán)限。一般來(lái)說(shuō),第一個(gè)調(diào)用的UG/open API函數(shù)就是UF_initialize()。當(dāng)不再調(diào)用API函數(shù)的時(shí)候,必須調(diào)用UF_terminate()來(lái)釋放執(zhí)行許可權(quán)限。UF_initialize()函數(shù)的調(diào)用應(yīng)該緊跟程序中的變量聲

22、明部分,而int UF_terminate()則應(yīng)在程序最后才被調(diào)用,對(duì)于外部UF和內(nèi)部UF都是如此,這說(shuō)明外部UF的運(yùn)行雖然脫離UG Gateway,但仍離不開(kāi)API執(zhí)行許可權(quán)限的支持。實(shí)例int DQXSJ_ok_cb ( int dialog_id,void * client_data,UF_STYLER_item_value_type_p_t callback_data)char step_id=11;char step_status=1;char dsn_name=dqxsj;char table_name=exp_know,table_name1 =condition_data;i

23、nt flag;if ( UF_initialize() != 0)return ( UF_UI_CB_CONTINUE_DIALOG );UG_OPEN_dqxsj_accept_data( dialog_id,&flag);if(flag=1) UG_OPEN_dqxsj_explain_data( dialog_id);UG_OPEN_delet_instance(step_id);UG_OPEN_add_part_to_product(dsn_name,step_id);UG_OPEN_edit_expression(dsn_name,table_name,table_name1);U

24、G_OPEN_set_order_knowledge(step_id,step_status) ;UF_terminate ();return (UF_UI_CB_EXIT_DIALOG);2.6 用戶(hù)入口2.6.1 User Exit概述User Exit是UG/Open API中的一個(gè)重要概念。UG在運(yùn)行過(guò)程中某些特定的地點(diǎn)存在著規(guī)定的入口,當(dāng)進(jìn)程執(zhí)行到這些入口時(shí),UG會(huì)自動(dòng)檢查用戶(hù)是否在此處已定義了指向內(nèi)部UF程序位置的環(huán)境。若沒(méi)有定義則以UG默認(rèn)的方式繼續(xù)運(yùn)行下去;若已定義則從該處自動(dòng)運(yùn)行用戶(hù)開(kāi)發(fā)程序,這個(gè)過(guò)程被稱(chēng)為User Exit。利用不同的User Exit能讓用戶(hù)程序在UG運(yùn)行

25、到特定點(diǎn)時(shí)被自動(dòng)執(zhí)行。不同的入口具有不同的User Exit名稱(chēng),用戶(hù)程序以不同的User Exit作為入口點(diǎn),就能決定該程序在UG進(jìn)程的哪個(gè)階段被自動(dòng)激活并運(yùn)行。每個(gè)User Exit都有唯一的入口名稱(chēng),以便用戶(hù)在子程序中調(diào)用,當(dāng)UG執(zhí)行到某個(gè)入口時(shí),便會(huì)在用戶(hù)程序中尋找對(duì)應(yīng)的User Exit函數(shù)名稱(chēng),若存在則調(diào)用該函數(shù)并執(zhí)行函數(shù)體,若不存在則繼續(xù)UG默認(rèn)進(jìn)程。不同的User Exit使用不同的入口函數(shù),最常用的User Exit是ufsta()與ufusr(), ufsta()是UG啟動(dòng)時(shí)的User Exit, ufusr()是直接激活的User Exit。通常情況下,User Exit

26、函數(shù)的參數(shù)和返回值都相同。User Exit函數(shù)的定義如下:void entry_point ( char * param, int * retcode, int rlen );其中 param和 retcode 是輸出參數(shù),rlen 指參數(shù) param 的長(zhǎng)度,由 UG 系統(tǒng)處理。2.6.2 ufusr()1.4節(jié)的First Project程序采用了直接激活( Explicit Activation )的 user Exit,其入口函數(shù)為 ufusr()。直接激活的操作方式如下:選擇菜單命令 FileExeeute UG/OPENUser Function(或按快捷鍵 Ctrl + U )

27、,在彈出的 Execute User Function 對(duì)話(huà)框中選擇 DLL 文件,即可執(zhí)行應(yīng)用開(kāi)發(fā)程序中的ufusr()函數(shù)。這種 User Exit 只是一個(gè)面向過(guò)程的程序處理任務(wù),它有唯一的運(yùn)行起止點(diǎn),程序碼在起止點(diǎn)間順序進(jìn)行。ufusr()的函數(shù)體如下所示:extern “C” DllExport void ufusr(char *param, int *retcod, int parm_len)/*Initialize the API environment*/int errorCode = UF_initialize();if ( 0 = errorCode ) /* TODO:

28、Add your application code here */ /* Terminate the API environment */ errorCode = UF_terminate(); /* Print out any error messages */PrintErrorMessage ( errorCode );2.6.3 ufsta()ufsta()是最常用的入口函數(shù),當(dāng)UG啟動(dòng)時(shí)激活該User Exit并執(zhí)行函數(shù)中的內(nèi)容,如1.4節(jié)的實(shí)例就采用了UG啟動(dòng)(UG startup)的User Exit。為了實(shí)現(xiàn)用戶(hù)菜單的調(diào)用功能,通常的做法是在UG啟動(dòng)時(shí)注冊(cè)用戶(hù)菜單的信息,當(dāng)UG

29、啟動(dòng)后選擇菜單命令時(shí)即可調(diào)用指定的應(yīng)用程序。注冊(cè)方法有兩種:UF_MB_add_style_actions()和UF_MB_add_actions(),將在3.5節(jié)詳細(xì)介紹。也可以直接在該入口函數(shù)中寫(xiě)入一個(gè)應(yīng)用,當(dāng)UG啟動(dòng)時(shí)執(zhí)行。ufsta()的函數(shù)體如下所示:extern C DllExport void ufsta ( char *param, int* returnCode, int rlen )/* Initialize the API environment */if(UF_initialize()!=O) return; /初始化/* TODO:Add your applicati

30、on code here */* Terrninate the API environment */UF_terminate();return;下面的例子很好地說(shuō)明了ufsta()函數(shù)的功用。在1.4節(jié)實(shí)例的ufsta()函數(shù)體中添加一行代碼,實(shí)現(xiàn)彈出一個(gè)消息對(duì)話(huà)框的功能。編譯完成后,打開(kāi)UG,會(huì)發(fā)現(xiàn)UG啟動(dòng)過(guò)程被一個(gè)消息對(duì)話(huà)框中斷,即當(dāng)UG啟動(dòng)時(shí)執(zhí)行了ufsta()函數(shù)中的內(nèi)容。extern C DllExport void ufsta ( char *param, int* returnCode, int rlen )if(UF_initialize()!=0) return; /初始化A

31、fxMessageBox(“ufsta”); /添加的一行代碼UF_terminate(); /終止return;2.6.4 其它User Exit每個(gè)User Exit都有唯一的環(huán)境變量相對(duì)應(yīng)。這些環(huán)境變量在UG環(huán)境配置文件ugii_env.dat(位于UG根目錄下的UGII文件夾中)中定義。表2-4所示列出了UG軟件提供的38個(gè)User Exit,具體說(shuō)明可參考Open C Reference Manual或頭文件UGOPENuf_exit.h。表2-4 其它User ExitUser Exit環(huán)境變量名入口函數(shù)Open PartUSER_RETRIEVEufgetNew PartUSER

32、_CREATEufcreSave PartUSER_FILEufputSave Part AsUSER_SAVEASufsvasImport PartUSER_MERGEufmrgExecute GRIP ProgramUSER_GRIPufgrpAdd Existing PartUSER_RCOMPufrcpExport PartUSER_FCOMPuffcpComponent Where-usedUSER_WHERE_USEDufusdPlot FileUSER_PLOTufplt2D Analysis Using CurvesUSER_AREAPROPCRVuf2daUser Defin

33、ed SymbolsUSER_UDSYMBOLufudsOpen CLSFUSER_CLS_OPENufclsoSave CLSFUSER_CLS_SAVEufclssRename CLSFUSER_CLS_RENAMEufclsrGenerate CLFUSER_CL_GENufclgPostprocess CLSFUSER_POSTufpostCreate ComponentUSER_CCOMPufccpChange Displayed PartUSER_CDISPufcdpChange Work PartUSER_CWORKufcwpRemove ComponentUSER_DCOMPu

34、fdcpReposition ComponentUSER_MCOMPufmcpSubstitute Component OutUSER_SCOMP1ufscpoSubstitute Component InUSER_SCOMP2ufscpiReplace Reference SetUSER_RRSETufrrsRename ComponentUSER_NCOMPufncpNX StartupUSER_STARTUPufstaAccess Genius Library Management SystemUSER_GENIUSufgenExecute Debug GRIPUSER_GRIPDEBUGufgrpdExecute Open C APIUSER_UFUNufuf

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論