| 操作系统 办公 实用知识 设计 开发 WEB开发 移动开发 数据库 软件工程 网管 安全 管理 信息化 答疑 渠道 |
C++Builder调用MatlabBorland C + +Builder 是 一 种 新 颖 的 可 视 化 编 程 语 言。 在 工 程 应 用 中, 我 们 一 般 用C + +Builder 语 言 编 写 应 用 程 序, 实 现 交 互 界 面、 数 据 采 集 和 端 口 操 作 等, 但C + +Builder 在 数 值 处 理 分 析 和 算 法 工 具 等 方 面, 其 效 率 远 远 低 于Matlab 语 言。 在 准 确 方 便 地 绘 制 数 据 图 形 方 面,Matlab 语 言 更 具 有 无 可 比 拟 的 优 势。 此 外,Matlab 还 提 供 功 能 强 大 的 工 具 箱。 但Matlab 的 缺 点 是 不 能 实 现 端 口 操 作 和 实 时 控 制。 因 此, 若 能 将 两 者 结 合 运 用, 实 现 优 势 互 补, 将 获 得 极 大 的 效 益。 一、C + +Builder 调 用Matlab 的 实 现 方 案 ----在Windows 系 统 中,DLL 是 一 种 很 特 别 的 可 执 行 文 件, 可 以 被 多 个Windows 应 用 程 序 同 时 访 问, 具 有 固 定 的 共 享 数 据 段。 该 数 据 段 的 数 据 在DLL 被Windows 下 载 前 会 一 直 保 留 在 内 存 中, 因 此 可 以 通 过DLL 实 现 用 户 程 序 与Matlab 之 间 的 数 据 传 输 和 函 数 调 用。 ----具 体 地 说, 就 是 利 用Matlab 的32 位 动 态 连 接 库(DLL), 生 成 相 应 的 可 以 被C + +Builder 调 用 的DLL, 用 来 提 供 二 者 之 间 的 基 本 支 撑 环 境。 只 需 在 用 户 程 序 中 加 载 该DLL, 即 可 实 现 其 数 据 段 的 共 享。 然 后 在 用 户 程 序 中 操 作DLL 数 据 段 的 数 据, 并 通 过 某 种 方 式 在 用 户 程 序 中 使Matlab 执 行 该DLL, 就 可 实 现 用 户 程 序 对Matlab 的 调 用。 其 形 式 可 以 是 混 合 编 程 或 函 数 调 用, 非 常 方 便 而 高 效。 ----2. 实 现 方 式 ----Matlab 提 供 了 可 外 部 连 接 的DLL 文 件, 通 过 将 其 转 换 为 相 应 的Lib 文 件, 并 加 以 必 要 的 设 置, 就 可 以 在C + +Builder 中 直 接 进 行Matlab 函 数 调 用, 实 现C + + Builder 语 言 与Matlab 语 言 的 混 合 编 程。 ----(1) 运 行 环 境 要 求 ----由 于Matlab 提 供 的 是32 位 的DLL。 其 运 行 环 境 要 求 是Matlab V4.2 或 更 高 版 本。C + +Builder 可 以 进 行32 位 编 程, 这 里 我 们 采 用 的 是V3.0 版 本。 ----(2) C + +Builder 下LIB 文 件 的 生 成 ----Matlab 提 供 的Def 文 件 允 许 用 户 通 过Implib 命 令 生 成 相 应 的Lib 文 件。 其 命 令 格 式 为: Implib ???.lib ???.def ----在< matlab >\extern\include 目 录 下, 提 供 了 如 下 三 个.Def 文 件: _libeng.def,_libmat.def,_libmx.def ----通 过 上 述 命 令 可 以 生 成 相 应 的 三 个Lib 文 件。 这 些Lib 文 件 中 包 含 了 可 外 部 调 用 的Matlab 函 数 的 必 要 信 息。 二、 实 现 计 算 和 绘 图 #include < vcl.h > #include “Unit1.h" __fastcall TMyForm::TMyForm(Tcomponent * Owner) void __fastcall TMyForm::DemoClick(Tobject *Sender) ----为 了 调 用Matlab 中 的 函 数, 必 须 进 行 必 要 的 设 置, 将 包 含 这 些 函 数 的 文 件 加 入 工 程 文 件Try.prj。 以 下 是 操 作 过 程: 在 头 文 件 中 加 入Engine.h。 其 包 含 了 启 动Matlab 调 用 和 关 闭 的 函 数 声 明。 ----在 进 行 了 这 些 必 要 的 设 置 之 后, 我 们 就 可 以 选 用 适 当 的 函 数 来 实 现 目 标。 以 下 是 子 函 数DemoMatlab 的 程 序 代 码。 void DemoMatlab S= mxCreateDoubleMatrix(1,6, mxREAL); engClose(eng); ----若 还 需 要 执 行 其 他 功 能 和 任 务, 那 么 按 照 上 面 介 绍 的 方 法, 进 行 变 量 声 明 后, 在1、2 处 加 写 需 要 的 语 句 即 可。 ----当 然, 使 用 这 种 方 法 调 用Matlab 不 能 脱 离 Matlab 环 境 的 支 撑。 但 当 我 们 不 需 要 看 到Matlab 的 命 令 窗 口 时, 可 将 其 赋 予Swhide 属 性 而 加 以 隐 藏。
今日推荐
|
重点推荐
领军企业技术文库
+更多领军技术文库
最新专题
电子杂志订阅
| ||||||||