ATL介绍(四)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

ATL 介 绍( 四 )

吕 思 伟--潘 爱 民

(接 上 期)

---- 4. 编 译 连 接 应 用、 注 册COM 服 务 程 序

---- 对ATL 工 程 的 编 译 连 接 过 程 包 括 下 面 的 几 个 步 骤:

  1. 使 用MIDL 编 译 工 程 的IDL 文 件, 形 成 接 口 定 义 的 头 文 件 和 用 于 调 度(Marshalling) 的 代 码。
  2. 编 译 工 程 的.cpp 文 件 形 成 目 标 文 件。
  3. 连 接 目 标 文 件, 形 成 应 用 模 块。
  4. 注 册COM 服 务 程 序。

---- 关 于 工 程 编 译 连 接 的 其 他 部 分 同Visual C++ 中MFC 工 程 的 编 译 连 接 过 程 相 似, 这 里 只 重 点 介 绍 一 下COM 服 务 程 序 的 注 册 过 程。

---- 在ATL 中,COM 服 务 程 序 的 注 册 是 在 工 程 编 译 连 接 的 最 后 阶 段, 由ATL 辅 助 完 成 的。 在 手 工 的COM 编 程 中, 服 务 程 序 的 注 册 是 比 较 麻 烦 的 工 作。 在ATL 中, 系 统 通 过 读 取 在 建 立 工 程 过 程 中 形 成 的 注 册 脚 本 文 件 来 完 成 注 册 工 作。 注 册 脚 本(Register Script, 简 称RGS) 是ATL 提 供 的 文 本 方 式 的 注 册 辅 助 文 件。 下 面 是 注 册 脚 本 文 件 的 一 个 实 例。

---- HKCR - 表 示 注 册 表 中COM 对 象 的 注 册 项, 是HKEY_CLASS_ROOT 的 缩 写

{
	AuthTest.ActiveXObject.1 = s'ActiveXObject Class'
{
	CLSID = s '{97A5CB10-AF82-11D2-B9BC-00104B04B867}'
} - 对 象 的ProgID
AuthTest.ActiveXObject = s 'ActiveXObject Class'
{
	CLSID = s '{97A5CB10-AF82-11D2-B9BC-00104B04B867}'
} - 对 象 的 与 版 本 无 关 的ProgID
NoRemove CLSID  - 对 象CLSID 注 册 项
{
	ForceRemove {97A5CB10-AF82-11D2-B9BC-00104B04B867}
    = s 'ActiveXObject Class'
    {
	  ProgID = s 'AuthTest.ActiveXObject.1'
	      VersionIndependentProgID = s 'AuthTest.ActiveXObject'
	   InprocServer32 = s '%MODULE% ' 
       - 服 务 器 类 型, 表 示DLL 服 务 器
	       {
		val ThreadingModel = s 'both'
        - 线 程 模 型, 这 里 是BOTH 型
	       }
	}
	}
}

---- RGS 文 件 包 含 注 册COM 服 务 程 序 的 各 项 内 容, 通 常 我 们 不 必 修 改 此RGS 文 件, 必 要 时 我 们 也 可 以 手 工 修 改RGS 文 件 来 定 制 模 块 的 注 册 过 程。

四、 应 用ATL 的 一 个 例 子

---- 上 面 介 绍 了 使 用ATL 创 建 一 个COM 服 务 程 序 的 基 本 过 程。 在 介 绍 过 程 中, 我 们 实 际 上 已 经 生 成 了 一 个COM 服 务 程 序 的 基 本 框 架, 只 是 没 有 填 写 实 际 的 内 容。 在 下 面 部 分, 我 们 将 具 体 开 发 一 个 十 分 简 单 的COM 服 务 程 序, 并 且 为 它 编 写 一 段 客 户 代 码 进 行 测 试, 使 大 家 对 使 用ATL 开 发COM 服 务 程 序 的 过 程 有 一 个 全 面 整 体 的 了 解。

---- 我 们 要 开 发 的 服 务 程 序 的 功 能 很 简 单, 它 只 实 现 一 个 接 口, 这 个 接 口 名 字 是ISimpleInterface, 接 口 只 有 一 个 成 员 函 数, 叫 做Welcome。 这 个 函 数 的 功 能 只 是 输 出 一 个"Hello World!" 的 字 符 串。

---- 按 照 上 一 部 分 介 绍 的 创 建COM 服 务 程 序 的 步 骤, 我 们 进 行 如 下 的 操 作。

  1. 打 开Visual C++ 集 成 开 发 环 境。
  2. 创 建 一 个 称 为SimpleTest 的ATL 工 程。
  3. 在 这 个 工 程 中 插 入 新 的 对 象, 对 象 的 名 字 是SimpleInterface。
  4. 设 置 接 口ISimpleInterface 的 有 关 属 性, 使 它 成 为 一 个 双 接 口。
  5. 在 对 象 的 接 口ISimpleInterface 中 加 入 方 法Welcome。
  6. 打 开ATL 加 入 的Welcome 方 法 的 框 架, 可 以 看 到 如 下 的 代 码 段。
STDMETHODIMP CActiveXObject::get_TestProp(long *pVal)
{
	  AFX_MANAGE_STATE(AfxGetStaticModuleState())

	  // TODO: Add your implementation code here

	  return S_OK;
} 

---- 7 . 将 程 序 框 架 中 的 注 释 部 分 替 换 为 下 面 的 代 码:

     ::MessageBox(NULL,_T("Hello World!"),_T("Welcome"), MB_OK)。
Welcome 方 法 被 调 用 时 将 弹 出 一 个 消 息 框。

---- 8 . 编 译 连 接 工 程。

---- 上 面 的 步 骤 完 成 以 后, 我 们 就 有 了 一 个 简 单 的COM 服 务 程 序, 而 且 已 经 被 注 册 到 当 前 系 统 中。

---- 下 面 我 们 要 完 成 一 个 简 单 的COM 客 户 程 序。 一 个COM 客 户 程 序 简 单 地 说 是 使 用COM 组 件 对 象 的 程 序。 客 户 程 序 调 用COM 对 象 的 基 本 流 程 如 下。

  1. 创 建COM 对 象 的 实 例。 这 可 以 通 过 调 用Windows 系 统 的API 函 数CoCreateInstance 来 完 成。
  2. 通 过 接 口 调 用 函 数。
  3. 调 用IUnknown::Release 释 放COM 对 象 实 例。

---- 我 们 的 客 户 程 序 是 使 用MFC 编 写 的 一 个 基 于 对 话 框 的 简 单 应 用 程 序。 具 体 的 过 程 如 下:

  1. 打 开Visual C++ 集 成 开 发 环 境。
  2. 创 建 一 个 称 为SimpleClient 的 基 于 对 话 框 的MFC 工 程。
  3. 在 对 话 框 中 加 入 一 个 按 钮, 名 字 为TEST。
  4. 在SimpleClient.cpp 文 件 中 加 入 如 下 的 代 码。

---- (1) 在.cpp 文 件 #include "simpleclientdlg.h" 之 后 加 入 下 面 的 代 码:

#include "d:/simpletest/simpletest_i.h"
// 根 据 需 要 修 改 头 文 件 的 路 径

---- 加 入 的 头 文 件 是 在 编 译COM 服 务 程 序 过 程 中 自 动 生 成 的, 其 中 包 含 接 口 本 身 的 定 义、 接 口IID 的 定 义 和COM 对 象 的CLSID 的 定 义。 包 含 该 头 文 件 可 以 使 客 户 程 序 能 够 使 用COM 服 务 程 序。

---- (2) 在 按 钮TEST 的 消 息 控 制 函 数 中 加 入 如 下 的 代 码:

 
HRESULT hr;   
ISimpleInterface* pIntf = NULL;
hr = CoCreateInstance
(CLSID_SimpleInterface, NULL, CLSCTX_SERVER , 
 IID_ISimpleInterface, (void **)& pIntf);
if(SUCCEEDED(hr))
{
pIntf- >Welcome();
pIntf- >Release();
}

---- 上 面 的 代 码 首 先 通 过 系 统API CoCreateInstance 创 建COM 对 象, 得 到 接 口 的 指 针, 然 后 调 用 接 口 成 员 函 数Welcome, 最 后 通 过IUnknown::Release() 函 数 释 放COM 对 象 实 例。

---- 5 . 编 译 连 接 客 户 程 序。

---- 最 后, 我 们 可 以 测 试 客 户 程 序 是 否 正 常 运 行。 启 动 客 户 程 序, 当 单 击"TEST" 按 钮 时 我 们 可 以 看 到 弹 出 一 个 消 息 框, 这 正 是 我 们 的COM 服 务 程 序 提 供 的 功 能。 ( 全 文 完)

---- ( 作 者 地 址: 北 京 大 学 计 算 机 科 学 技 术 研 究 所,100871; 收 稿 日 期:1999.08)

ATL 创建COM对象 之前写了一篇原始dll的创建过程,以及直接使用LoadLibrary加载动态库。 但ATL所做的一个很重要的功能就是引入COM对象这个概念。 首先, ATL active template library为活动模板库,ATL为asp代码中提供COM对象应用。而一般使用活动模版库来创建COM组件。简单来说ATL一般作为方便快捷的COM开发工具使用。而ATL中使用的基本技术为 COM技术,C++ 阅读详情

相关推荐

ATL编程初级教程

二、建立 ATL 工程  步骤2.1:建立一个解决方案。  步骤2.2:在 该解决方案中,新建一个 vc++ATL 项目。示例程序叫 Simple2,并选择DLL方式,见图一、图二。 图一、新建 ATL 项目 图二、选择非属性化的DLL组件类型  属性化 属性化编程,是未来的方向,但我们现在先不要选它。  动态链接库(DLL) 选择它。  可执行文件(EXE) 以后再

scollins的专栏 2009

吕 思 伟 ---- 潘 爱 民 :: ATL 介 绍( )

ATL 介 绍( ) 吕 思 伟--潘 爱 民 (接 上 期) ---- 4. 编 译 连 接 应 用、 注 册COM 服 务 程 序 ---- 对ATL 工 程 的 编 译 连 接 过 程 包 括 下 面 的 几 个 步 骤: 使 用MIDL 编 译 工 程 的IDL 文 件, 形 成 接 口 定 义 的 头 文 件 和 用 于 调 度(Marshalling)...

yesjavame 180

基于ATLCom服务注册后被调用,CoCreateInstance返回0x80080005,服务启动失败

CoCreateInstance返回0x80080005服务程序启动失败

Think88666的博客 1140

使用Atl与WTL组合技术构建可调用的Windows界面

Atl(Active Template Library)是一个轻量级的C++模板库,最初由微软提供用于简化COMComponent Object Model)组件的开发。由于其轻巧、高效的特点,Atl成为了进行Windows平台开发的开发者们不可或缺的工具。WTL,即Windows Template Library,是一个开源的C++模板库,专为Windows平台下快速开发用户界面(UI)而设计。

weixin_42298164的博客 1081

Atl与WTL结合创建COM组件用户界面

本文还有配套的精品资源,点击获取 简介:Atl是微软的C++模板库,用于简化COM组件开发,而WTL是微软提供的用于Windows GUI应用程序设计的轻量级开源库。本项目将讲解如何利用Atl和WTL来生成用户界面,并构建一个可通过COM接口调用的DLL。首先建立Atl工程,并集成WTL来创建窗口和控件。然后定义并实现一个Atl COM接口,利用WTL实现界面生成和业务逻辑...

weixin_30820933的博客 996

手写ATL COM组件深度指南

ATL(Active Template Library)是微软推出的一套用于简化COMComponent Object Model)组件开发的C++模板库。它为创建轻量级的COM对象提供了一系列预定义的模板类和辅助功能,如智能指针和自动化包装器。对于希望快速实现COM组件的开发者来说,ATL是一个高效的工具。事件是对象状态发生变化时,由对象向其他对象或客户端发出的通知。在COM中,事件的定义和分发主要通过连接点(Connection Points)来实现。

weixin_32925455的博客 394

ATL介绍()

ATL 介 绍 () 吕 思 伟---- 潘 爱 民 ---- ( 接 上 期) 允 许 支 持MFC。 由 于ATL 对 除COM 以 外 的 基 本 的Windows 编 程 方 面 的 支 持 极 为 有 限, 同 时 许 多 程 序 员 对MFC 又 非 常 熟 悉, 因 此 在ATL 的 工 程 设 置 中 允 许 在ATL 工 程 内 部 支 持 使 用MFC, 即 可 以 使

lithe的Blog 2022

ICESat-2 ATL08链接到ATL03光子

目前大家用的比较多的其实也就ATL03和ATL08两种数据。其中ATL03主要记录了原始的光子数据,主要包括所有光子的经纬度坐标。而ATL08为应用层数据,包括分类后的信号光子信息,提取的分段地面高程、树高等信息。具体包括的内容大家最好还是下个数据看一下,本文重点不在此,故不再过多赘述。

qq_29949039的博客 1825

ATL介绍()

ATL介绍()吕思伟潘爱民一、什么是ATL1.COM的发展及其局限性 自从1993年Microsoft首次公布了COM技术以后,Windows平台上的开发模式发生了巨大的变化,以COM为基础的一系列软件组件化技术将Windows编程带入了组件化时代。广大开发人员在为COM带来的软件组件化趋势欢欣鼓舞的同时,对于COM开发技术的难度和烦琐的细节也感到极其的不便。COM编程一度被视为一种高不

缘来是我 1080

ATL是什么

ATL,Active TEmplateLibrary活动模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。这种COM组件可以包含属性页、对话框等等控件。 ATL简介    一. 什么是ATL   自从1993年Microsoft首次公布了COM技术以后,

yuhuimin111的专栏 6806

ATL简介

ATL简介   一. 什么是ATL   自从1993年Microsoft首次公布了COM技术以后,Windows平台上的开发模式发生了巨大的变化,以COM为基础的一系列软件组件化技术将Windows编程带入了组件化时代。广大的开发人员在为COM带来的软件组件化趋势欢欣鼓舞的同时,对于COM开发技术的难度和烦琐的细节也感到极其的不便。COM编程一度被视为一种高不可

步入什么 2675

ATL介绍

ATL 介 绍() 吕 思 伟 ---- 潘 爱 民 一、 什 么 是ATL ---- 1 .COM 的 发 展 及 其 局 限 性 ---- 自 从1993 年Microsoft 首 次 公 布 了COM 技 术 以 后,Windows 平 台 上 的 开 发 模 式 发 生 了 巨 大 的 变 化, 以COM 为 基 础 的 一 系 列 软 件 组 件 化 技 术 将Windows 编 程

放飞梦想 4843

VS2008下ATL入门介绍样例及使用

一、前言   1、本回讲解的是在VS 2008 下的使用ATL. 并使用Win 32 Console Application进行测试以及C#项目进行测试(调用COM).   2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFunTest,它有一个简单的函数: Sum()完成两个数值的加法   3、ATL介绍  ATL...

丰空岛主(Vega Prime,Android,LabWindows,ThreeJS,Python,OpenCV) 946

ATL快速入门与实践

在组件对象模型(Component Object Model, COM)中,接口是定义一组方法的规范,这些方法是组件对外暴露的功能点。接口是COM核心概念之一,它保证了不同组件之间的互操作性。一个接口由一个唯一的标识符(GUID)和一组方法签名组成,这样可以确保接口在二进制层面的兼容性,使得不同的组件即便由不同的编程语言或开发环境创建,也能够在运行时互操作。为了创建一个接口,通常需要遵循以下步骤:定义一个接口结构,它继承自IUnknown接口。使用uuid。

weixin_33582089的博客 1145

ATL入门基础(什么是ATL)(ZZ)

ATL入门基础(什么是ATL)(ZZ) ATL     ATL,Active TEmplate Library活动模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。这种COM组件可以

坚持,才是力量.老实做人,踏实做事. 2312

windows ATL项目简介

COMATL技术结合了COMATL,使开发者能在Windows平台上快速构建COM组件,实现如ShellExtension等win32功能。本文将介绍如何创建VisualStudio的ATL项目

风之岷的开发空间 1767

潘爱民::介绍一本关于ATL的书《ATL Internals》 ----转

面对计算机图书市场的繁荣景象,我经常感叹今天学习计算机开发技术的同道们是多么幸运。十年前,我们学习计算机语言非常不容易,要掌握各种开发工具只有靠自己的摸索和极少量的参考手册。我记得,94年我学习Visual C++MFC的时候,基本上只有靠软件自带的联机帮助;现在情形大不同了,书店中的计算机图书琳琅满目,关于Visual C++MFC的书籍尤其多。有几位编辑朋友劝我写一点这方面的书,我觉得不大有必要了,因为Visual C++的好书已经不少了,适合各种读者层次的书籍几乎都可以买到,而且有一些书还相当不错

massice的专栏 1245

COM/ATL 运用ATL工程创建和调用COM组件】

ATL (Active Template Library) 是一个用于简化 COM (Component Object Model) 组件开发的库。使用 ATL,你可以创建 COM 对象,这些对象可以跨进程和跨机器进行通信。下面是一个简单的步骤,说明如何使用 ATL 创建一个简单的 COM 组件,并在另一个程序中使用它。 然后在你的 ATL 类中实现这个方法: 步骤 3: 注册 COM 组件 编译你的 ATL 项目后,你需要注册你的 COM 组件。这通常可以通过运行生成的 DLL 或 EXE 文件的 /R

一起学习进步! 1653
上一篇: ATL介绍(三)
下一篇: 论实时控制系统与企业信息系统的集成——论文1:通信业应用
lithe
博客等级 码龄25年 32粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值