在VB 中调用动态连接库
2008-02-23 06:59:02来源:互联网 阅读 ()
---- Windows 动 态 连 接 库 是 包 含 数 据 和 函 数 的 模 块, 可 以 被 其 它 可 执 行 文 件(EXE、DLL、OCX 等) 调 用。 动 态 连 接 库 包 含 两 种 函 数: 输 出(exported) 函 数 和 内 部(internal) 函 数。 输 出 函 数 可 以 被 其 它 模 块 调 用, 而 内 部 函 数 则 只 能 在 动 态 连 接 库 内 部 使 用。 尽 管 动 态 连 接 库 也 能 输 出 数 据, 但 实 际 上 它 的 数 据 通 常 是 只 在 内 部 使 用 的。 使 用 动 态 连 接 库 的 优 点 是 显 而 易 见 的。 将 应 用 程 序 的 一 部 分 功 能 提 取 出 来 做 成 动 态 连 接 库, 不 但 减 小 了 主 应 用 程 序 的 大 小, 提 高 了 程 序 运 行 效 率, 还 使 它 更 加 易 于 升 级。 多 个 应 用 程 序 共 享 一 个 动 态 连 接 库 还 能 有 效 地 节 省 系 统 资 源。 正 因 为 如 此, 在Windows 系 统 中, 动 态 连 接 库 得 到 了 大 量 的 使 用。
---- 一 般 来 说, 动 态 连 接 库 都 是 以DLL 为 扩 展 名 的 文 件, 如Kernel32.dll 、commdlg.dll 等。 但 也 有 例 外, 如16 位Windows 的 核 心 部 件 之 一GDI.exe 其 实 也 是 一 个 动 态 库。 编 写 动 态 连 接 库 的 工 具 很 多, 如Visual C 、Borland C 、Delphi 等, 具 体 方 法 可 以 参 见 相 关 文 档。 下 面 只 以Visual C 5.0 为 例, 介 绍 一 下 开 发 应 用 于Visual Basic 5.0 的 动 态 连 接 库 时 应 注 意 的 问 题( 本 文 中 所 有 涉 及C/C 语 言 或 编 译 环 境 的 地 方, 都 以VC5 为 例; 所 有 涉 及Visual Basic 的 地 方 都 以VB5 为 例)。
---- 作 为 一 种32 位Windows 应 用 程 序 的 开 发 工 具,VB5 生 成 的exe 文 件 自 然 也 都 是32 位 的, 通 常 情 况 下 也 只 能 调 用32 位 的 动 态 连 接 库。 但 是, 并 不 是 所 有 的32 位 动 态 库 都 能 被VB 生 成 的exe 文 件 正 确 地 识 别。 一 般 来 说, 自 己 编 写 用 于VB 应 用 程 序 调 用 的 动 态 连 接 库 时, 应 注 意 以 下 几 个 方 面 的 问 题:
---- 1、 生 成 动 态 库 时 要 使 用__stdcall 调 用 约 定, 而 不 能 使 用 缺 省 的__cdecl 调 用 约 定;__stdcall 约 定 通 常 用 于32 位API 函 数 的 调 用。
---- 2、 在VC5 中 的 定 义 文 件(.def) 中, 必 须 列 出 输 出 函 数 的 函 数 名, 以 强 制VC5 系 统 将 输 出 函 数 的 装 饰 名(decorated name) 改 成 普 通 函 数 名; 所 谓 装 饰 名 是VC 的 编 译 器 在 编 译 过 程 中 生 成 的 输 出 函 数 名, 它 包 含 了 用 户 定 义 的 函 数 名、 函 数 参 数 及 函 数 所 在 的 类 等 多 方 面 的 信 息。 由 于 在VC5 中 定 义 文 件 不 是 必 需 的, 因 此 工 程 不 包 含 定 义 文 件 时VC5 就 按 自 己 的 约 定 将 用 户 定 义 的 输 出 函 数 名 修 改 成 装 饰 名 后 放 到 输 出 函 数 列 表 中, 这 样 的 输 出 函 数 在VB 生 成 的 应 用 程 序 中 是 不 能 正 确 调 用 的( 除 非 声 明 时 使 用Alias 子 句)。 因 此 需 要 增 加 一 个.def 文 件, 其 中 列 出 用 户 需 要 的 函 数 名, 以 强 制VC5 不 按 装 饰 名 进 行 输 出。
---- 3、VC5 中 的 编 译 选 项" 结 构 成 员 对 齐 方 式(structure member alignment)" 应 设 成4 字 节, 其 原 因 将 在 后 文 详 细 介 绍。
---- 4、 由 于 在C 中 整 型 变 量 是4 个 字 节, 而VB 中 的 整 型 变 量 依 然 只 有2 个 字 节, 因 此 在C 中 声 明 的 整 型(int) 变 量 在VB 中 调 用 时 要 声 明 为 长 整 型(long), 而C 中 的 短 整 型(short) 在VB 中 则 要 声 明 成 整 型(integer); 下 表 针 对 最 常 用 的 C 语 言 数 据 类 型 列 出 了 与 之 等 价 的 Visual Basic 类 型( 用 于 32 位 版 本 的 Windows)。
---- C 语 言 数 据 类 型 在Visual Basic 中 声 明 为 调 用 时 使 用 的 表 达 式
---- ATOM ByVal variable As Integer 结 果 为Integer 类 型 的 表 达 式
---- BOOL ByVal variable As Long 结 果 为 Long 类 型 的 表 达 式
---- BYTE ByVal variable As Byte 结 果 为 Byte 类 型 的 表 达 式
---- CHAR ByVal variable As Byte 结 果 为 Byte 类 型 的 表 达 式
---- COLORREF ByVal variable As Long 结 果 为 Long 类 型 的 表 达 式
---- DWORD ByVal variable As Long 结 果 为 Long 类 型 的 表 达 式
---- HWND, HDC, HMENU ByVal variable As Long 结 果 为 Long 类 型 的 表 达 式 等Windows 句 柄
---- INT, UINT ByVal variable As Long 结 果 为 Long 类 型 的 表 达 式
---- LONG ByVal variable As Long 结 果 为 Long 类 型 的 表 达 式
---- LPARAM ByVal variable As Long 结 果 为 Long 类 型 的 表 达 式
---- LPDWORD variable As Long 结 果 为 Long 类 型 的 表 达 式
---- LPINT, LPUINT variable As Long 结 果 为 Long 类 型 的 表 达 式
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:一组VB实用小程序
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash