n 分 配 的 资 源, 调 用lineShutDown(hTapi) 释 放 为 线 路 设 备 分 配 的 资 源
三、 软 硬 件 环 境
---- 下 图 示 意 出 了 我 们 的 应 用 程 序 所 处 的 位 置 以 及 涉 及 到 的 软 硬 件 环 境:
---- 我 们 的 通 信 应 用 程 序 通 过TAPI 操 作Modem 拨 号、 应 答、 链 接、 挂 机 控 制 电 话 呼 叫, 在 编 制DOS 应 用 程 序 的 时 候, 我 们 经 常 使 用Hayes 兼 容 的AT 命 令 集 来 完 成 这 些 操 作, 由 于 各 调 制 解 调 器 厂 家 对 该 命 令 集 都 做 了 各 自 的 扩 展, 因 而, 我 们 的DOS 应 用 程 序 一 般 只 能 操 作 一 小 部 分 调 制 解 调 器, 而 各 厂 家 都 提 供Window 驱 动 程 序, 所 以, 使 用TAPI 编 制 的 应 用 程 序 能 够 操 作 绝 大 多 数 调 制 解 调 器; 图 中 的 通 信API 是 应 用 程 序 发 送、 接 收 数 据 的 编 程 接 口。
四、 程 序 流 程 结 构 框 图
---- 由 于Win95 为 多 任 务 操 作 系 统, 我 们 的 流 程 图 只 能 代 表 本 应 用 程 序 的 执 行 先 后 关 系, 程 序 中 的 等 待 及 检 测 实 际 上 是 等 待 Win95 提 供 的 消 息, 所 以 并 不 占 用CPU 时 间, 在 下 面 的 程 序 中 可 以 看 出。 另 外, 数 据 交 换 的 协 议 可 由 自 己 制 定, 也 可 使 用 已 有 的 协 议。
五、 软 件 编 制
---- 由 于Windows 编 程 的 框 架 基 本 相 同, 在 此 我 们 只 介 绍 涉 及 到 通 信 的 一 部 分 源 程 序:
---- 1 头 文 件 中 应 该 包 括:
---- #include < tapi.h >
---- 请 注 意 工 程 文 件 的 属 性 应 该 是Windows 32 位 应 用 程 序
---- 2 通 信 所 涉 及 到 的 一 些 全 局 变 量 定 义 及 类 型 定 义:
char RecBuf[20],buf[20]// 缓 冲 区
DWORD Error; // 错 误 码
COMSTAT Status; // 状 态 码
DWORD NumLine; // 允 许 使 用 的 线 路 设 备 数
LINECALLPARAMS para;// 呼 叫 参 数
TmyDecFrame * pwin=NULL;// 主 窗 口 指 针
HLINEAPP myhTapi;// 线 路 应 用 程 序 句 柄
HLINE myhLine;// 线 路 句 柄
HANDLE myhModem;// 调 制 解 调 器 句 柄
HCALL myhCall;// 呼 叫 句 柄
typedef struct tagModemID{
HANDLE hModem;
char ModemName;
}ModemID;
---- 3 下 面 为 获 取 调 制 解 调 器 句 柄 的 函 数 定 义
---- 因 为 每 个 调 制 解 调 器 的 标 志 字 符 串 长 度 不 一, 所 以 函 数 中 用 到 了 可 变 长 度 的 字 符 串, 处 理 方 法 是 先 为 字 符 串 指 针 分 配sizeof(VARSTRING) 大 小 的 空 间, 再 利 用 该 空 间 容 纳 调 用LineGetID 时Windows 返 回 的 信 息, 根 据 返 回 信 息 判 断 所 需 空 间 大 小 重 新 分 配 空 间, 再 次 调 用LineGetID 就 可 以 取 得 完 整 的 标 志 字 符 串。
void GethModem(HLINE hLine)
{ ModemID far *mid;
VARSTRING * str;
LONG lid;
DWORD size;
&n