張忠華,李紅巖,任重貴
哈爾濱醫(yī)科大學大慶校區(qū),黑龍江 大慶 163319
Authorware是多媒體領域普及度極高的開發(fā)平臺,具有應用簡單、通用性強的特點。筆者在具體的項目開發(fā)過程中遇到過將外接設備在Authorware環(huán)境中打開并應用的問題。Authorware的功能在這方面比較有限,所以筆者嘗試使用外部自定義函數(shù)的方式解決問題,最終獲得成功。此自定義函數(shù)的創(chuàng)建,是通過動態(tài)鏈接庫(dynamic link library,DLL)技術實現(xiàn)的。Windows系統(tǒng)中DLL文件的大量存在表明其價值:①充分擴展應用程序的功能;②簡化項目管理;③節(jié)約內(nèi)存;④實現(xiàn)資源共享等[1]。筆者認為,基于DLL技術的多媒體平臺設計有助于擴展Authorware的系統(tǒng)功能?,F(xiàn)將Authorware應用DLL技術的自定義函數(shù)的經(jīng)驗與同行分享,希望對大家有所幫助。
Authorwre可以使用內(nèi)部與外部兩種自定義函數(shù),內(nèi)部自定義函數(shù)就是把某一計算圖標內(nèi)的程序代碼或者是存儲于外部文本文件的程序代碼、甚至是一段字符串程序語句定義為函數(shù)形式[2],其實質是將計算圖標變?yōu)楹瘮?shù)樣式。實現(xiàn)方法也比較簡單,只需將圖標中的屬性面板的“包含編寫的函數(shù)”復選框選中即可。而外部自定義函數(shù)需要使用其他高級語言制作,通過函數(shù)載入的方式來應用。
Authorware使用的外部自定義函數(shù)主要以外部擴展U32(UCD)、DLL、Xtras形式封裝,而用戶制作的自定義函數(shù)通常使用DLL的形式,DLL是一個可以被其他應用程序共享的程序模塊,封裝了一些可以被共享的資源[3]。一個DLL文件中可以包含多個自定義函數(shù),但開發(fā)自定義函數(shù)時,應注意其他高級語言的數(shù)據(jù)類型可能與Authorware所要求的數(shù)據(jù)類型不能一一對應,應根據(jù)實際情況來確定自定義的返回值。Authorware只能使用字節(jié)、字詞、浮點數(shù)、雙精度數(shù)、字串、字符、短型、長型、指針或空值等類型的值,其他類型的函數(shù)不能載入,也不可以被應用。
Delphi以其簡便易用、語法嚴謹?shù)奶攸c受廣大程序員的喜愛,其自帶的工具豐富,大大簡化了編程工作量,并且程序經(jīng)編譯后的適應面廣,可移植性好。用Delphi開發(fā)封裝自定義函數(shù)的DLL文件可靠易行,可勝任為Authorware開發(fā)自定義函數(shù)的重任。
Delphi開發(fā)DLL文件時,其語法格式上有特殊要求,要按如下語法進行編寫:
說明:每個DLL文件中可包含多個函數(shù),每個函數(shù)要有一個確定的返回值,Delphi中的數(shù)據(jù)類型有整型、實型、布爾型、字符型和字符串型等基本類型,還有子界類型、枚舉類型、集合類型、數(shù)組類型、記錄類型、指針類型和文件類型等自定義類型[4]。這些值應與Authorware的要求相對應。在Uses中要包含函數(shù)中所用到的各單元名稱,如果用到對話框則應包括Dialogs,如果是數(shù)據(jù)庫應用則包括DB和ADODB內(nèi)容,可在函數(shù)體中使用TADOQuery創(chuàng)建對象,才能具體應用。
涉及到對數(shù)據(jù)庫的數(shù)據(jù)進行各種操作應用,如添加記錄、刪除記錄和各種條件查詢,可將與操作數(shù)據(jù)庫相關的部分做成DLLs。當用戶對數(shù)據(jù)操作的需求發(fā)生變化時,修改DLLs的相關代碼并將該DLLs拷貝到使用者處,這樣可及時滿足用戶需求,不斷完善程序功能,便于版本更新[5]。形式參數(shù)列表中的參數(shù)應標明類型,這些函數(shù)或過程本身必須用export編譯指令進行編譯[6]。
在Delphi中創(chuàng)建DLL,按File→New→Other→DLL Wizard的步驟創(chuàng)建一個DLL Wizard項目。該文包含用于求圖片文件的高度與寬度的函數(shù)。具體設計過程是這樣的,在窗口中輸入具體代碼如下:
將輸入的代碼用Project菜單下的Build dlls命令創(chuàng)建DLL文件,如果創(chuàng)建過程中沒有相應的錯誤,則在Authorware中基本上可以正常使用DLL內(nèi)的自定義函數(shù)。Delphi創(chuàng)建DLL文件的環(huán)境如圖1所示。
圖1 Delphi創(chuàng)建DLL文件時工作界面
在Authorware中使用高級語言所創(chuàng)建的自定義函數(shù)過程如下:首先打開函數(shù)面板,在分類選項中選擇項目名稱XX.a7p,其中XX表示項目名稱,如果項目暫未起名,則此項為“未命名.a7p”。選擇后,面板下方的“載入…”按鈕變?yōu)榭捎脿顟B(tài),單擊此按鈕,出現(xiàn)加載函數(shù)對話框,從中選擇具體的DLL文件名,會出現(xiàn)“非Authorware DLL對話框”,要求用戶填入具體載入的函數(shù)名、參數(shù)類型、返回值類型以及對該函數(shù)的描述(如圖2所示)。填好各項后,單擊“載入”按鈕,即可將所需函數(shù)轉入函數(shù)面板中(如圖3所示)。其后在Authorware中按函數(shù)的應用方法正常使用即可。
圖2 非Authorware DLL函數(shù)載入對話框
圖3 函數(shù)載入后效果
該例是在一個用于顯示數(shù)據(jù)庫圖像的實例中使用了DLL自定義函數(shù),其中的運行代碼為:
運行效果圖如圖4所示。
圖4 Authorware環(huán)境中的運行效果
用Delphi為Authorware制作自定義函數(shù),可以解決很多Authorware所不能解決的問題。如Authorware的數(shù)據(jù)庫應用能力較弱,可通過Delphi開發(fā)一些專用函數(shù),則能較好地解決這類問題。其實用其他高級語言也可以制作DLL文件,如用C++制作DLL文件[7],但C++的易用程度與Delphi相比明顯要差一些,且應用較復雜。另外,用VB也可以制作DLL文件[8],同樣,在VB中也可以使用由其他高級語言創(chuàng)建的DLL[9]。但筆者在用VB為Authorware開發(fā)基于DLL文件的自定義函數(shù)時,卻遇到了在Authorware中無法加載所制作函數(shù)的問題,這需要運用到一些其他特別的方法解決,而且比較麻煩。具體操作過程網(wǎng)上已有介紹[10],所以不建議使用VB為Authorware開發(fā)封裝在DLL文件中的自定義函數(shù)。
[1]徐君明,李國林,趙紅超,等.基于動態(tài)鏈接庫的虛擬儀表建模與仿真[J].航天控制,2010,28(1):70-73
[2]郭新房,倪寶童,王健,等.Authorware 7.0多媒體制作基礎教程與案例實踐[M].北京:清華大學出版社,2007:139-140
[3]張玉珍,顏廷睿.DLL及其在 Delphi中的應用[J].計算機時代,2005,(1):45-46
[4]徐長梅,任文進.Delphi2005數(shù)據(jù)庫教程[M].武漢:武漢大學出版社,2008:17-22
[5]馬麗艷,張春芳,李瑞.用Delphi開發(fā)數(shù)據(jù)庫應用功能的DLL程序[J].河北師范大學學報:自然科學版,2007,32(2):173-175
[6]賈維珉.淺析Delphi中動態(tài)鏈接庫的使用[J].中國電子商務,2011,(6):63
[7]蔡洪濤,王延紅,張巧健,等.Visual C++開發(fā)Authorware 7動態(tài)鏈接庫函數(shù)的方法及應用[J].沈陽師范大學學報:自然科學版,2008,26(3):323-325
[8]王敏.DLL的創(chuàng)建及應用[J].中南民族大學學報:自然科學版,2005,24(1):58-60
[9]畢蘇萍,周振紅,張成才.Fortran Win32 DLL回調VB窗體[J].計算機工程與設計,2010,31(13):3092-3095
[10]Petrusha R.Creating a Windows DLL with Visual Basic[DB/OL].http://www.windowsdevcenter.com/pub/a/windows/2005/04/26/cre ate_dll.html?page=1,2005-04-26