---- 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 Demo
DESCRIPTION ‘c++xyy DLL for Windows’
EXETYPE WINDOWS
CODE MOVEABLE DISCARDABLE
DATA MOVEABLE SINGLE
HEAPSIZE 0
EXPORTS
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++ 语 言 的 任 意 按 需 编 程 的 优 势, 给 我 们 的 软 件 开 发 带 来 许 多 便 利。