張忠華,李紅巖,任重貴
哈爾濱醫科大學大慶校區,黑龍江 大慶 163319
Authorware是多媒體領域普及度極高的開發平臺,具有應用簡單、通用性強的特點。筆者在具體的項目開發過程中遇到過將外接設備在Authorware環境中打開并應用的問題。Authorware的功能在這方面比較有限,所以筆者嘗試使用外部自定義函數的方式解決問題,最終獲得成功。此自定義函數的創建,是通過動態鏈接庫(dynamic link library,DLL)技術實現的。Windows系統中DLL文件的大量存在表明其價值:①充分擴展應用程序的功能;②簡化項目管理;③節約內存;④實現資源共享等[1]。筆者認為,基于DLL技術的多媒體平臺設計有助于擴展Authorware的系統功能。現將Authorware應用DLL技術的自定義函數的經驗與同行分享,希望對大家有所幫助。
Authorwre可以使用內部與外部兩種自定義函數,內部自定義函數就是把某一計算圖標內的程序代碼或者是存儲于外部文本文件的程序代碼、甚至是一段字符串程序語句定義為函數形式[2],其實質是將計算圖標變為函數樣式。實現方法也比較簡單,只需將圖標中的屬性面板的“包含編寫的函數”復選框選中即可。而外部自定義函數需要使用其他高級語言制作,通過函數載入的方式來應用。
Authorware使用的外部自定義函數主要以外部擴展U32(UCD)、DLL、Xtras形式封裝,而用戶制作的自定義函數通常使用DLL的形式,DLL是一個可以被其他應用程序共享的程序模塊,封裝了一些可以被共享的資源[3]。一個DLL文件中可以包含多個自定義函數,但開發自定義函數時,應注意其他高級語言的數據類型可能與Authorware所要求的數據類型不能一一對應,應根據實際情況來確定自定義的返回值。Authorware只能使用字節、字詞、浮點數、雙精度數、字串、字符、短型、長型、指針或空值等類型的值,其他類型的函數不能載入,也不可以被應用。
Delphi以其簡便易用、語法嚴謹的特點受廣大程序員的喜愛,其自帶的工具豐富,大大簡化了編程工作量,并且程序經編譯后的適應面廣,可移植性好。用Delphi開發封裝自定義函數的DLL文件可靠易行,可勝任為Authorware開發自定義函數的重任。
Delphi開發DLL文件時,其語法格式上有特殊要求,要按如下語法進行編寫:

說明:每個DLL文件中可包含多個函數,每個函數要有一個確定的返回值,Delphi中的數據類型有整型、實型、布爾型、字符型和字符串型等基本類型,還有子界類型、枚舉類型、集合類型、數組類型、記錄類型、指針類型和文件類型等自定義類型[4]。這些值應與Authorware的要求相對應。在Uses中要包含函數中所用到的各單元名稱,如果用到對話框則應包括Dialogs,如果是數據庫應用則包括DB和ADODB內容,可在函數體中使用TADOQuery創建對象,才能具體應用。
涉及到對數據庫的數據進行各種操作應用,如添加記錄、刪除記錄和各種條件查詢,可將與操作數據庫相關的部分做成DLLs。當用戶對數據操作的需求發生變化時,修改DLLs的相關代碼并將該DLLs拷貝到使用者處,這樣可及時滿足用戶需求,不斷完善程序功能,便于版本更新[5]。形式參數列表中的參數應標明類型,這些函數或過程本身必須用export編譯指令進行編譯[6]。
在Delphi中創建DLL,按File→New→Other→DLL Wizard的步驟創建一個DLL Wizard項目。該文包含用于求圖片文件的高度與寬度的函數。具體設計過程是這樣的,在窗口中輸入具體代碼如下:


將輸入的代碼用Project菜單下的Build dlls命令創建DLL文件,如果創建過程中沒有相應的錯誤,則在Authorware中基本上可以正常使用DLL內的自定義函數。Delphi創建DLL文件的環境如圖1所示。

圖1 Delphi創建DLL文件時工作界面
在Authorware中使用高級語言所創建的自定義函數過程如下:首先打開函數面板,在分類選項中選擇項目名稱XX.a7p,其中XX表示項目名稱,如果項目暫未起名,則此項為“未命名.a7p”。選擇后,面板下方的“載入…”按鈕變為可用狀態,單擊此按鈕,出現加載函數對話框,從中選擇具體的DLL文件名,會出現“非Authorware DLL對話框”,要求用戶填入具體載入的函數名、參數類型、返回值類型以及對該函數的描述(如圖2所示)。填好各項后,單擊“載入”按鈕,即可將所需函數轉入函數面板中(如圖3所示)。其后在Authorware中按函數的應用方法正常使用即可。

圖2 非Authorware DLL函數載入對話框

圖3 函數載入后效果
該例是在一個用于顯示數據庫圖像的實例中使用了DLL自定義函數,其中的運行代碼為:

運行效果圖如圖4所示。

圖4 Authorware環境中的運行效果
用Delphi為Authorware制作自定義函數,可以解決很多Authorware所不能解決的問題。如Authorware的數據庫應用能力較弱,可通過Delphi開發一些專用函數,則能較好地解決這類問題。其實用其他高級語言也可以制作DLL文件,如用C++制作DLL文件[7],但C++的易用程度與Delphi相比明顯要差一些,且應用較復雜。另外,用VB也可以制作DLL文件[8],同樣,在VB中也可以使用由其他高級語言創建的DLL[9]。但筆者在用VB為Authorware開發基于DLL文件的自定義函數時,卻遇到了在Authorware中無法加載所制作函數的問題,這需要運用到一些其他特別的方法解決,而且比較麻煩。具體操作過程網上已有介紹[10],所以不建議使用VB為Authorware開發封裝在DLL文件中的自定義函數。
[1]徐君明,李國林,趙紅超,等.基于動態鏈接庫的虛擬儀表建模與仿真[J].航天控制,2010,28(1):70-73
[2]郭新房,倪寶童,王健,等.Authorware 7.0多媒體制作基礎教程與案例實踐[M].北京:清華大學出版社,2007:139-140
[3]張玉珍,顏廷睿.DLL及其在 Delphi中的應用[J].計算機時代,2005,(1):45-46
[4]徐長梅,任文進.Delphi2005數據庫教程[M].武漢:武漢大學出版社,2008:17-22
[5]馬麗艷,張春芳,李瑞.用Delphi開發數據庫應用功能的DLL程序[J].河北師范大學學報:自然科學版,2007,32(2):173-175
[6]賈維珉.淺析Delphi中動態鏈接庫的使用[J].中國電子商務,2011,(6):63
[7]蔡洪濤,王延紅,張巧健,等.Visual C++開發Authorware 7動態鏈接庫函數的方法及應用[J].沈陽師范大學學報:自然科學版,2008,26(3):323-325
[8]王敏.DLL的創建及應用[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