在 Visual C++ 中 建 立 MFC 扩 展 DLL (转)

在 Visual C++ 中 建 立 MFC 扩 展 DLL (转)[@more@]

在 Visual C++ 中 建 立 MFC 扩 展 DLL    我 们 编 写 了 一 个 扩 展 类 的 样 例 并 将 其 封 装 在 DLL 中 以 向 你 演 示 该 过 程。

    有 经 验 的 windows 编 程 人 员 都 逐 渐 放 弃 了 Windows SDK, 而 转 向 能 为 Windows 内 置 的 低 级 机 制 提 供 高 级 抽 象 的 开 发 环 境。 这 种 转 移 的 一 个 主 要 受 益 者 是 Visual C++, 它 依 靠 MFC 库 来 提 供 Windows api 的 面 向 对 象 的 视 图。

    MFC 是 经 验 丰 富 的 编 程 人 员 掌 握 的 有 力 工 具, 但 它 离 完 美 还 相 距 甚 远。 事 实 上, 我 所 认 识 的 以 MFC 编 程 为 谋 生 手 段 的 人 都 开 发 了 他 或 她 自 己 的 扩 展 集 合, 他 们 以 MFC 类 作 为 基 础 类 来 派 生 自 己 的 类。 这 毕 竟 是 C++ 的 威 力。 如 果 某 个 类 不 能 满 足 你 的 需 求 ( 而 且 如 果 它 恰 好 可 以 作 为 设 计 的 开 始 ), 你 可 以 从 它 自 由 地 派 生 新 类 并 修 改 你 不 喜 欢 的 部 分。

    假 设 你 编 写 了 一 个 MFC 扩 展 集 合, 并 愿 意 与 公 司 的 其 它 开 发 人 员 共 享。 你 该 如 何 封 装 这 些 扩 展 呢? 你 可 以 分 发 源 代 码 文 件 或 与 Visual C++ 组 件 库(Component Gallery) 兼 容 的 组 件。 或 许 你 可 以 象 MFC 那 样 在 DLL 中 封 装 你 的 扩 展。 就 象 传 统 的 DLL 能 够 导 出 函 数 一 样, MFC 扩 展 DLL 可 以 导 出 类。 任 何 动 态 链 接 到 MFC DLL 的 应 用 程 序 都 能 动 态 链 接 到 MFC 扩 展 DLL。 作 为 开 发 者, 你 只 需 使 其 包 括 必 要 的 头 文 件 并 在 应 用 程 序 的 链 接 列 表 中 添 加 DLL 导 入 库。

   编 写 MFC 扩 展 DLL 困 难 吗? 有 了 Visual C++ 和 MFC 的 支 持, 这 实 际 非 常 轻 松。 本 文 解 释 了 如 何 创 建 MFC 扩 展 DLL 来 弥 补 MFC 的 CToolTipCtrl 类 的 明 显 不 足。 一 旦 意 识 到 其 简 便 性, 你 会 忍 不 住 亲 自 编 写 几 个 MFC 的 扩 展。

    编 写 MFC 扩 展 DLL

   从 理 论 角 度 而 言, MFC 的 CTool-TipCtrl 类 简 化 了 将 提 示 信 息(ToolTip) 与 对 话 框 的 控 件 或 窗 口 的 任 意 区 域 相 关 联 的 过 程。 ( 提 示 信 息 是 当 鼠 标 光 标 停 滞 于 工 具 栏 按 钮 或 其 它 UI 对 象 时 弹 出 的 小 型 帮 助 文 本 窗 口。 ) 但 有 个 问 题 尚 待 解 决。 由 于 CToolTipCtrl::AddTool 不 能 自 动 成 为 提 示 信 息 依 附 的 窗 口 的 子 类, 因 此 鼠 标 事 件 必 须 手 工 转 交 给 提 示 信 息 控 制。 这 通 常 意 味 着 你 必 须 自 己 给 窗 口 建 立 子 类。

    如 果 你 给 CToolTipCtrl 对 象 下 的 提 示 信 息 控 制 传 送 了 正 确 的 标 志, 它 应 该 能 给 自 己 创 建 子 类 —— 这 显 然 是 被 MFC 设 计 组 忽 略 的 功 能。 幸 运 的 是, 该 疏 忽 并 不 难 以 纠 正。 只 要 从 CToolTipCtrl 类 中 派 生 出 一 个 类, 用 类 似 的 函 数 代 替 CToolTipCtrl::AddTool 即 可, 该 函 数 的 TTM_ADDTOOL 消 息 使 用 TOOLINFO 结 构, 它 的 uFlags 域 中 包 含 TTF_SUBCLASS 标 志。 更 好 的 方 式 是 用 两 个 函 数 代 替 它: 它 们 分 别 给 子 窗 口 和 矩 形 窗 口 区 域 添 加 提 示 信 息。 AddTool 函 数 同 时 支 持 两 者, 但 在 语 法 结 构 上 创 建 提 示 信 息 的 两 种 方 法 截 然 不 同。

    图 1 和 图 2 显 示 了 名 为 CToolTip-CtrlEx 的 CToolTipCtrl 的 派 生 类 的 源 代 码。 该 派 生 类 给 它 继 承 的 内 容 添 加 了 两 个 函 数, 其 一 CToolTipCtrl::AddWindow 将 提 示 信 息 与 子 窗 口 相 关 联, 其 二 AddRectangle 使 提 示 信 息 依 附 于 窗 口 的 矩 形 区 域。 这 两 个 函 数 都 使 用 了 TTF_SUBCLASS 标 志 以 使 提 示 信 息 的 创 建 过 程 尽 可 能 简 单。 假 设 m_tooltipCtrl 是 CToolTipCtrlEx 对 象, 给 控 制 ID 为 IDC_BUTTON 的 按 钮 添 加 提 示 信 息 就 非 常 容 易 了:

    m_tooltipCtrl.AddWindow (

    GetDlgItem (IDC_BUTTON),

    "Enter tooltip text here!");

    如 何 将 CToolTipCtrlEx 类 封 装 至 DLL 呢? 以 下 是 在 Visual C++ 4.x 中 的 详 细 步 骤:

    1. 启 动 Visual C++ 并 通 过 从 File 菜 单 选 择 New 来 创 建 新 项 目, 双 击 Project Workspace。 在 New Project Workspace 的 Name 框 中 输 入 “MfcExt”( 不 带 引 号 )。 在 Type 框 中 选 择 MFC AppWizard(dll)。 然 后 点 击 Create 按 钮。

    2. 在 AppWizard 的 Step 1 对 话 框 中, 通 过 在“What type of DLL would you like to create?” 项 中 选 择“MFC Extension DLL(using shared MFC DLL)”。 点 击 Finish 按 钮, 然 后 点 击 OK 产 生 DLL 的 初 始 代 码。 注 意“MFC Extension DLL” 后 括 弧 中 显 示 的“using shared MFC DLL”。 当 你 编 写 MFC 扩 展 DLL 时, 不 能 选 择 静 态 链 接 至 MFC。 DLL 必 须 动 态 链 接 到 MFC 库。

    3. 弹 出 ClassWizard 并 点 击 Add Class 按 钮。 选 择 New 打 开 Create New Class 对 话 框。 在 其 中 标 有“Base class” 的 框 中 选 择 CToolTipCtrl, 在 标 有“Name” 的 框 中 输 入“CToolTipCtrlEx”。 使 用 Change 按 钮 将 文 件 名 改 为 Tooltip.h 和 Tooltip.cpp。(改 变 文 件 名 并 不 是 绝 对 必 要 的, 我 这 样 做 是 为 了 避 免 长 文 件 名。) 不 要 选 中“Add to Component Gallery” 框 以 节 省 磁 盘 空 间。 点 击 Create 命 令 ClassWizard 执 行 类 派 生, 而 后 点 击 OK 退 出 ClassWizard。

    4. 如 图 2 所 示, 给 CToolTipCtrlEx 类 添 加 成 员 函 数 AddWindow 和 AddRectangle。 由 于 这 两 个 函 数 要 在 CToolTipCtrlEx 外 被 访 问, 因 此 确 定 它 们 都 是 public 的。 技 巧: 在 Visual C++ 中 给 类 添 加 成 员 函 数 的 简 便 方 法 是 在 ClassView 窗 口 中 右 击 类 名, 并 从 快 捷 菜 单 中 选 择 Add Function。

    5. 在 ClassView 窗 口 中, 双 击 CToolTipCtrlEx 打 开 类 的 头 文 件。 在 类 说 明 的 class 关 键 字 后 添 加 AFX_EXT_CLASS(参 见 图 1)。

    6. 建 立 项 目。 你 将 产 生 两 个 重 要 文 件: DLL 本 身(Mfcext.dll) 以 及 DLL 的 导 入 库(Mfcext.lib)。 导 入 库 基 本 上 是 导 出 函 数 名 的 列 表 —— 或 者, 在 本 例 中 是 一 系 列 导 出 类。 链 接 至 导 入 库 使 应 用 程 序 能 使 用 从 MFC 扩 展 DLL 中 导 出 的 类, 就 如 同 包 含 类 的 库 是 静 态 链 接 的 一 样。 与 Mfcext.lib 链 接 还 使 得 Windows 知 道 应 用 程 序 需 要 Mfcext.dll 才 能 运 行。

    使 用 MFC 扩 展 DLL

  创 建 使 用 Mfcext.dll 的 应 用 程 序 是 轻 而 易 举 的。 只 要 确 保 在 使 用 CToolTipCtrlEx 的 每 个 类 中 包 括 Tooltip.h 头 文 件, 并 且 将 Mfcext.lib 添 加 至 项 目 的 链 接 库 列 表 中 即 可。 然 后 CToolTipCtrlEx 就 可 以 象 普 通 MFC 类 那 样 使 用 了。 当 回 答 AppWizard 的 询 问 时 一 定 要 选 择“As a shared DLL”, 这 样 你 的 应 用 程 序 才 能 动 态 链 接 至 MFC。 你 可 以 通 过 从 Visual C++ 的 Build 菜 单 中 选 择 Settings 将 Mfcext.lib 添 加 至 项 目 的 链 接 列 表 中, 点 击 Link 标 签 并 在 标 有“object/library modules” 的 框 中 输 入 Mfcext.lib 的 路 径(参 见 图 3)。

    ToolTest 是 作 为 样 例 的 应 用 程 序, 它 在 对 话 框 中 显 示 一 个 按 钮。 它 动 态 链 接 至 Mfcext.dll 并 使 用 CToolTipCtrlEx。 该 应 用 程 序 是 基 于 对 话 框 的, dialog 类 包 含 名 为 m_tooltipCtrl 的 CToolTipCtrlEx 成 员 变 量。 对 话 框 的 OnInitDialog 函 数 中 的 以 下 代 码 创 建 提 示 信 息 控 制 并 给 对 话 框 的 按 钮 设 置 提 示 信 息:

    m_tooltipCtrl.Creat (this);

    m_tooltipCtrl.AddWindowTool (

    GetDlgItem (IDC_EXIT),

    "Click here to close");

    当 光 标 停 在 按 钮 上 时, 提 示 信 息 窗 口 中 显 示“Click here to close”。 点 击 该 按 钮 可 以 关 闭 应 用 程 序。

    你 可 以 从 PC Magazine Online(www.pcmag.com) 下 载 ToolTest 和 Mfcext.dll 的 完 整 源 代 码。 从 主 页 左 侧 的 菜 单 中 选 择 DOWNLOADs, 然 后 依 次 选 择 PC Tech Archives 和 文 件 V16n15.zip。 CompuServe 的 Utilities/tips 论 坛(GO ZNT:TIPS) 上 也 有 该 文 件。 我 们 的 文 件 包 含 在 该 归 档 文 件 中。 使 用 PKUNzip 的 -d 开 关 解 压 文 件(Mfcext.zip 和 Tooltest.zip), 以 便 .ZIP 文 件 中 的 目 录 也 能 一 同 被 解 压。 在 运 行 ToolTest 之 前, 将 Mfcext.dll 拷 贝 至 Windows 系 统 目 录 或 Tooltest.exe 所 在 的 目 录。 否 则, 当 执 行 ToolTest 时, Windows 可 能 找 不 到 Mfcext.dll。 如 果 你 打 算 建 立 自 己 的 Tooltest.exe 版 本, 修 改 Project Settings 对 话 框 的“Object/library modules” 框 的 路 径 名, 使 Visual C++ 能 获 悉 在 PC 的 何 处 寻 找 Mfcext.lib 文 件。

    总 结

    创 建 MFC 扩 展 DLL 非 常 容 易 —— 只 要 你 知 道 了 该 如 何 操 作。 当 你 给 其 它 开 发 人 员 分 发 MFC 扩 展 DLL 时, 不 要 忘 记 提 供 描 述 DLL 中 类 的 头 文 件 以 及 相 应 的 .LIB 文 件 和 DLL 本 身。 此 后 开 发 人 员 就 能 充 分 利 用 你 装 配 的 扩 展 了。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-988065/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-988065/

基于Visual C++6.0的DLL编程实现 基于Visual C++6.0的DLL编程实现2003-3-28 12:44:42   YESKY   刘涛   阅读次数: 14498 一、前言  自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上Windows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着,例如显示的字体和图标存储在GDI DL 阅读详情

相关推荐

找不到mfc140u.dll或者Microsoft Visual C++ 2017 Redistributable一直安装失败解决

找不到mfc140u.dll 安装后提示这个问题,我将xshell卸载重新安装后发现安装过程中提示Microsoft Visual C++ 2017 Redistributable一直安装失败,所以问题出在Microsoft Visual C++ 2017 Redistributable上 首先查看日志文件 Condition '(VersionNT = v6.3 AND NOT VersionNT64) AND (windows_uCRT_DetectKeyExists AND windows_uCRT

luminous_you的博客 1万+

VC++动态链接库编程之MFC扩展 DLL

前文我们对非MFC DLLMFC规则DLL进行了介绍,现在开始详细分析DLL的最后一种类型――MFC扩展DLL。   6.1概论  MFC扩展DLLMFC规则DLL的相同点在于在两种DLL的内部都可以使用MFC类库,其不同点在于MFC扩展DLL与应用程序的接口可以是MFC的。MFC扩展DLL的含义在于它是MFC扩展,其主要功能是实现从现有MFC库类中派生出可重用的类。MFC扩展DLL使用MF

fxpopboy的博客 1219

c++/clr DLL调用MFC DLL需要注意的问题

这两周有个项目需要打包测试,guo

仙子崖 2511

Visual C++ MFC DLL

Visual C++ MFC DLL    我 们 编 写 了 一 个 类 的 样 例 并 将 其 封 装 在 DLL 中 以 向 你 演 示 该 过 程。     有 经 验 的 Windows 编 程 人 员 都 逐 渐 放 弃 了 Windows SDK, 而 向 能 为 Windows 内 置 的 低 级 机 制 提 供 高 级 抽

7428

MFC DLL向导(一)

    虽然能用DLL实现的东西都可以用COM来实现,但DLL的优点确实不少,它更容易创。本文将讨论如何利用MFC来创不同类型的DLL,以及如何使用他们。一、DLL的不同类型    使用MFC可以生成两种类型的DLLMFC扩展DLL和常规DLL。常规DLL有可以分为动态连接和静态连接。Visual C++还可以生成WIN32 DLL,但不是这里讨论的主要对象。1、MFC扩展DLL   每个D

C++、.NET、WPF、Android 2744

MFC--Extension DLL(扩展DLL)

本文阐述的动态链接库的一种,mfc 扩展动态链接库--MFC Extension DLL.最后以一个程序的启动画面来用实例说明一下这个dll的使用 MFC扩展dll主要是为了实现可重用类,也就是MFC标准类库进行继承,然后通过DLL进行重用,一次开发,多次使用。扩展dll使用MFC的动态连接的库版本生成的。只有使用动态连接库的可执行程序或是regular dll(规则动态链接库)才可以使用扩展d

xinzhiyounizhiyouni的专栏 2847

vs2010 MFC DLL和调用

今天把vs2010重新修复重装了,曾经所有崩溃现象基本上不存在,一直以为是AMD芯片拼不过wintel的原因,不过wintel开发软件放到其他PC上运行比AMD上编译出来的要稳定一些,曾今做了一个软件,在AMD上编译通过,到wintel上运行经常报错,结果查看错误报文,大致用english说不兼容AMD某个寄存器,所以即改在wintel上编译,救过就OK了. 说了几句无关的话,只是太...

FLY_THINK2012的博客 575

C++笔记-DLL的编写与调用

目录 基本概念 代码与实例 基本概念 Visual Studio的编译环境下,DLL分为3类: 非MFCDLL,使用SDK API进行编程,能被所有语言调用。 MFC规则DLL,可以使用MFC进行编程,能被其他语言调用。 MFC扩展DLL,可以使用MFC进行编程,但只能被MFC编写的程序调用。 // dllmain.cpp : 定义 DLL 应用程序的入口点...

IT1995的博客 7001

cad由于找不到mfc140u.dll的解决方法,彻底解决mfc140u.dll丢失问题

mfc140u.dll是一个属于微软公司的文件,它是 Microsoft Foundation Classes (MFC) 库的一部分,一个用于C++的集成开发环境,使得开发者能够利用C++来创Windows桌面应用程序。这样文件就会被恢复到它原来的位置。在右侧窗口中找到名为“mfc140u.dll”的项,如果不存在,则创一个新的字符串值,并将其值设置为mfc140u.dll文件的路径。从回收站还原丢失的 mfc140u.dll 文件是一种解决方法,检查回收站中是否有误删的mfc140u.dll文件。

weixin_57940283的博客 3645

VC++ MFC DLL

VC++ MFC DLL

xkdlzy的专栏 748

C++ #error 指令: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll versi

错误 在使用VS编译文件时出现了如下错误: #错误:使用/ MD [d](CRT dll版本)构MFC应用程序需要MFC共享dll版本。请#define _AFXDLL或不使用/ MD [d] 解决方案 1.先选择“属性管理器”,然后按如下路径:项目-》属性-》C/C++-》代码生成-》运行库,将“多线程调试DLL(/MDd)”改成“多线程(/MT)”或“多线程调试(/MTd)” 2.选择“解决方案管理器”,然后按如下路径:项目-》属性-》配置属性-》常规-》项目默认值-》MFC的使用,选择“在

Como0413的博客 1万+

MFC dll编程与加载

VS2003以上版本,在工程的时候,就可以添加是否要加载dll文件,但是工程添加后,MFCdll文件是不好添加的。有关DLL的编程以及加载,一直都没有一个简单的,合适的方案,比如我想往DLL的函数接口中传入参数,我想让DLL中也能拥有界面,比如对话框等。我在这里,经过自己的经验,给大家提出一种快速,简单的DLL开发方案。 DLL分为普通DLL,和MFCDLL,普通DLL可以使用在其他

曾伟的专栏 1879

XShell 启动报错:mfc140u.dll / mfc110.dll

mfc140u.dll 去微软官网下载 Microsoft Visual C++ 2015 Redistributable Update 3 一定要下载 32 位的文件,也就是 X86 版本。64 位也就是 X64 是没有 mfc140u.dll 的,X86 才有 mfc110.dll 去微软官网下载 Visual C++ Redistributable for Visual Studio 2012 Update 4 下载指定的程序,并安装。 对于大部分 vcrt*** .dl

Superman_H的博客 9163

Visual C++ DLL编程体验(1)

1. 为什么有产生DLL(Dynamic Linkable Library)    答:1)重用。DLL提供了一些可以直接拿来用的变量、类和函数。例如C++中的Scanf函数            2)静态链接库(lib)与动态链接库(DLL)都是提供了一种代码的共享方式,区别在:采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中。DLL不必被包含在最终E

xiaoling9的专栏 1623

VS2008环境下MFC程序所需DLL文件完整部署包

Dependency Walker 是微软提供的一款免费工具,用于分析32位和部分64位Windows可执行文件(EXE)、动态链接库(DLL)、驱动程序(SYS)等二进制模块的依赖结构。它通过读取PE(Portable Executable)格式文件中的导入表(Import Table)和导出表(Export Table),生成可视化的依赖关系图谱,并标识出所有被引用但未找到的模块、函数绑定状态、延迟加载信息等关键数据。

weixin_42588877的博客 978

Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版

有很多人都在问C++MFC怎么免注册调用?其实这些都有参考但是对于新手来说,编译器对新手的不友好,很多编程新手就算是找到别人的注册方法也分析运行不了,这是为什么呢?这是出教程的人根本就没考虑到新手,很多细节问题留下来了,然后你哪里就报错,代码报红,就编译不通过,然后你就觉得这个方法不行,然后就放弃了,今天我们就来解决这个问题,用最详细的图文来告诉你跟着我的步骤来你就能C++MFC免注册调用大漠插件。...

a756598009的博客 5633

找不到mfc140u.dll怎么修复,mfc140u.dll丢失的多种修复方法

mfc140u.dll是Microsoft Visual C++ 2015的可再发行组件之一,它属于Microsoft Foundation Class (MFC) 库,许多使用MFC开发的程序需要这个DLL文件来正确执行。1.当您尝试运行一个需要mfc140u.dll的程序时,如果系统找不到这个文件,依赖于该 DLL 文件的应用程序无法正常启动。您可能会看到类似以下的错误消息:“无法找到mfc140u.dll”“mfc140u.dll缺失”“mfc140u.dll错误”“mfc140u.dll无法加载”

2301_77698200的博客 1474
上一篇: 嵌入式系统设计和Windows CE (转)
下一篇: 网友趣文:《东邪西毒》之程序员版 (转)
csd3176
博客等级 码龄11年 20粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值