林立
(黑龍江信息技術(shù)職業(yè)學(xué)院,黑龍江 哈爾濱 150086)
在進(jìn)行二次開發(fā)的過程中,需要?jiǎng)?chuàng)建一個(gè)新線程,執(zhí)行一些操作,而CAA并沒有提供多線程的方法,這樣就需要使用DLL,在DLL創(chuàng)建新線程實(shí)現(xiàn)這個(gè)操作。
DLL和CAA介紹
DLL:DLL 是 Dynamic Link Library的縮寫,意為動(dòng)態(tài)鏈接庫(kù)。
程序使用 DLL的優(yōu)點(diǎn)
(1)使用較少的資源
當(dāng)多個(gè)程序使用同一個(gè)函數(shù)庫(kù)時(shí),DLL可以減少在磁盤和物理內(nèi)存中加載的代碼的重復(fù)量。這不僅可以大大影響在前臺(tái)運(yùn)行的程序,而且可以大大影響其他在 Windows操作系統(tǒng)上運(yùn)行的程序。
(2)推廣模塊式體系結(jié)構(gòu)
DLL有助于促進(jìn)模塊式程序的開發(fā)。這可以幫助您開發(fā)要求提供多個(gè)語(yǔ)言版本的大型程序或要求具有模塊式體系結(jié)構(gòu)的程序。模塊式程序的一個(gè)示例是具有多個(gè)可以在運(yùn)行時(shí)動(dòng)態(tài)加載的模塊的計(jì)帳程序。
DLL有兩種類型,當(dāng)在應(yīng)用程序中加載DLL時(shí),可以使用兩種鏈接方法來(lái)調(diào)用導(dǎo)出的DLL函數(shù)。這兩種鏈接方法是加載時(shí)動(dòng)態(tài)鏈接和運(yùn)行時(shí)動(dòng)態(tài)鏈接。
在加載時(shí)動(dòng)態(tài)鏈接中,應(yīng)用程序像調(diào)用本地函數(shù)一樣對(duì)導(dǎo)出的 DLL函數(shù)進(jìn)行顯式調(diào)用。要使用加載時(shí)動(dòng)態(tài)鏈接,請(qǐng)?jiān)诰幾g和鏈接應(yīng)用程序時(shí)提供頭文件 (.h)和導(dǎo)入庫(kù)文件 (.lib)。當(dāng)您這樣做時(shí),鏈接器將向系統(tǒng)提供加載 DLL所需的信息,并在加載時(shí)解析導(dǎo)出的 DLL函數(shù)的位置。
根據(jù)對(duì)兩種類型的了解,結(jié)合CATIA的開發(fā)包CAA開發(fā)語(yǔ)言的特點(diǎn),選擇了第一種加載時(shí)動(dòng)態(tài)鏈接。
CAA:Component Application Architecture(CAA)組件應(yīng)用架構(gòu),是第三方產(chǎn)品集成和一般客戶進(jìn)行客戶化、個(gè)性化設(shè)計(jì)的強(qiáng)有力的工具。
CATIA(Computer Aided Three&Two Dimensional Interaction Application System,計(jì)算機(jī)輔助三維/二維交互式應(yīng)用系統(tǒng))V5是IBM/DS基于Windows核心開發(fā)的高端CAD/CAM軟件系統(tǒng)。作為強(qiáng)大的工程軟件,CATIA具有很強(qiáng)的開放性能。用戶可以按照自己的需要,采用不同方式進(jìn)行各種程度上的開發(fā)。
二次開發(fā):二次開發(fā),簡(jiǎn)單的說就是在現(xiàn)有的軟件上進(jìn)行定制修改,功能的擴(kuò)展,然后達(dá)到自己想要的功能,一般來(lái)說都不會(huì)改變?cè)邢到y(tǒng)的內(nèi)核。
具體來(lái)說,CATIA的二次開發(fā)主要有兩種方法:使用宏對(duì)CATIA進(jìn)行二次開發(fā)和使用組件應(yīng)用架構(gòu)(CAA-RADE)對(duì)CATIA進(jìn)行二次開發(fā)。
(1)使用宏(Macro)對(duì)CATIA進(jìn)行二次開發(fā)。
可以用于自動(dòng)化(Automation)組件,使用VBScript作為編輯工具,這是一種交互方式的定制。可以記錄用戶的操作過程,自動(dòng)生成代碼。CATIA提供了Automation API用于VBScript對(duì)CATIA的二次開發(fā),Automation API具備了與任何OLE所兼容的平臺(tái)進(jìn)行通訊能力。自動(dòng)化應(yīng)用接口可以調(diào)用“InputBox”和“MsgBox”函數(shù)獲取用戶輸入信息和進(jìn)行輸出,而對(duì)于NT用戶則可以應(yīng)用Visual Basic來(lái)定義更為復(fù)雜的輸入輸出面板。運(yùn)行的時(shí)候可以給宏關(guān)聯(lián)一個(gè)圖標(biāo),并置入CATIA顯示框架。
(2)使用組件應(yīng)用架構(gòu)(CAA-RADE)對(duì)CATIA進(jìn)行二次開發(fā),CAA組件應(yīng)用架構(gòu),是Dassault Systemes產(chǎn)品擴(kuò)展和客戶進(jìn)行二次開發(fā)的強(qiáng)有力工具。
快速應(yīng)用研發(fā)環(huán)境Rapid Application Development Environment(RADE)是一個(gè)可視化的集成開發(fā)環(huán)境,它提供完整的編程工具組。RADE以Microsoft Visual C++6.0為載體,開發(fā)工具完全集成在了VC++環(huán)境中,并且提供了一個(gè)CAA框架程序編譯器,但同時(shí)也限制了VC++的部分功能??梢哉fCATIA CAA-RADE是目前所有高端CAD/CAM開發(fā)環(huán)境中最為復(fù)雜、同時(shí)也是功能最為強(qiáng)大的一個(gè)。
CAA采用面向?qū)ο蟮某绦蛘Z(yǔ)言,開發(fā)過程可看作是其組件對(duì)象的組合和擴(kuò)展。CAA采用組件對(duì)象模型CAA采用面向?qū)ο蟮某绦蛘Z(yǔ)言,開發(fā)過程可看作是其組件對(duì)象的組合和擴(kuò)展。CAA采用組件對(duì)象模型(COM)和對(duì)象的連接和嵌入(OLE)技術(shù)。
創(chuàng)建DLL的步驟
第一步:運(yùn)行AppWizard,定義項(xiàng)目名為mydll,選擇 MFC AppWizard(dll)。
第二步:在這個(gè)例子中,只有一個(gè)AppWizard屏幕出現(xiàn),選擇MFC擴(kuò)展DLL(MFC Extension DLL(using shared MFC DLL),點(diǎn)擊 FINISH生成工程。
第三步:創(chuàng)建導(dǎo)出函數(shù)
(1)創(chuàng)建一個(gè)文件夾,將動(dòng)態(tài)鏈接庫(kù)導(dǎo)出.h文件和Lib文件放入該文件夾。
(2)在CAA的.mkmk文件中加入提供頭文件 (.h)和導(dǎo)入庫(kù)文件 (.lib)
(3)在CAA程序使用該導(dǎo)出函數(shù)的類中添加頭文件,即可使用導(dǎo)出函數(shù)。
動(dòng)態(tài)鏈接庫(kù)在軟件中很常見,它的優(yōu)點(diǎn)注定它是程序員的最愛。在CATIA的二次開發(fā)中還有很多情況使用DLL,比如說訪問數(shù)據(jù)庫(kù),CAA沒有訪問數(shù)據(jù)庫(kù)的接口,這樣就需要使用DLL讀取數(shù)據(jù)庫(kù)的內(nèi)容,與CATIA進(jìn)行交互。對(duì)于CATIA的用戶來(lái)講,有了更多的使用空間。
[1]《Visual c++6.0編程寶典》,電子工業(yè)出版社,[美]David Simon等著。
[2]《c++How To Program(Second Edition)》,電子工業(yè)出版社,Harvey M.Deitel、paul James Deitel著。