---- Microsoft Windows 提 供 了 稱 之 為 動 態 連 接 庫 的 特 殊 庫(DLL), 讓 應 用 程 序 共 享 代 碼 和 資 源。DLL 是 一 個 包 括 了 若 幹 函 數 的 可 執 行 模 塊, 為 其 他 應 用 程 序 提 供 服 務。Windows 利 用DLL 來 提 供 所 有Windows 應 用 程 序 均 可 以 使 用 的 代 碼 和 資 源。 此 外, 應 用 程 序 也 可 以 創 建 自 己 的DLL, 在 自 己 的 各 個 應 用 程 序 之 間 共 享 代 碼 和 資 源。
---- DLL 主 要 有 如 下 目 標:
- 應 用 程 序 之 間 共 享 代 碼 和 資 源
- 基 於 系 統 範 圍 的 消 息 過 濾
- 創 建 設 備 驅 動 程 序
- 提 供 開 發 複 雜 應 用 程 序 的 設 施
---- 我 們 現 在 要 研 究 的 問 題 是, 如 何 通 過 開 發DLL 來 拓 展、 增 強 常 用 軟 件 的 功 能, 如:VB4.0、ToolBook3.0 等。
---- 常 用 來 開 發DLL 的 平 台 有BlandC++、MS VisualC++, 二 者 之 間 在 開 發DLL 是 有 一 定 的 差 別, 但 最 方 便 的 是MS VisualC++。 這 裡 我 們 利 用MS VisualC++ 開 發 一 個Demo.DLL, 它 定 義 一 個 函 數:F1=(x,y)=x*y。 通 過 這 個 實 例 說 明DLL 的 程 序 結 構, 再 通 過 對Demo.DLL 的 調 用 說 明 增 強 軟 件 功 能。
---- 實 例:
---- 在Demo.DLL 中 定 義 一 個 F1(x,y)=x*y ;
---- 總 共 需 要 三 個 文 件:Demo.h ;Demo.c;Demo.DEF
* 在 頭 文 件(Demo.h) 中:#include < windows.h >extern int_export_far_pascal F1(int,int);* 在 源 程 序(Demo.c) 中:#include< windows.h >#include“Demo.h”int FAR PASCAL LibMain(HINSTANCE hInstance,WORD wDataSegment,WORD wHeapSize,LPSTR lpszCmdLine){ return 1;}int _export_far_pascal F1(int X,int Y){int data;data=X*Y;return data;}int FAR PASCAL WEP(int bSystemExit){ return 1;}* 在 模 塊 文 件(Demo.def) 中:LIBRARY DemoDESCRIPTION ‘c++xyy DLL for Windows’EXETYPE WINDOWSCODE MOVEABLE DISCARDABLEDATA MOVEABLE SINGLEHEAPSIZE 0EXPORTS F1@1
---- * 在VB 使 用DLL :
---- 在 調 用 之 削 首 先 要 在MODULE 模 塊 中 聲 明 函 數, 聲 明 的 格 式 是:
Declare Function 函 數 名 Lib“DLL 名”(Byval 參 數 As Datatype,,)Declare Function F1 Lib“Demo”(ByVal X As Integer,ByVal X As Integer)As Integer
---- 然 後 就 可 以 在 任 何 地 方 使 用 函 數F1()。
---- * 在ToolBook3.0 中 使 用DLLs:
---- 在 調 用 之 前 首 先 要 連 接DLL, 並 聲 明 函 數 原 型, 聲 明 的 格 式 是:
link DLL “Demo.dll” 函 數 類 型 函 數 名( 參 數 類 型,,) INT F1(INT,INT)end linkDLL
---- 利 用 以 上 方 法 可 以 方 便 地 開 發DLL, 用 來 拓 展vb4.0、ToolBook3.0、Delphi1.0 等 大 部 分 軟 件 的 功 能, 使 其 功 能 更 加 強 大, 比 如: 實 現 對 非 標 准 硬 件 的 控 制、 滿 足 要 求。 這 樣 我 們 即 利 用 了 新 型 軟 件 的 可 視 化 對 象 編 程, 又 結 合 了C++ 語 言 的 任 意 按 需 編 程 的 優 勢, 給 我 們 的 軟 件 開 發 帶 來 許 多 便 利。