COM实现核心

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

5.进程内组件和进程外组件

进程内组件:使用动态链接库的形式实现,客户程序调用组件程序的服务时,会把组件程序装入到自己的进程中,客户程序和组件程序运行在同一个进程空间中,成为进程内组件。用DLL构造出来的COM组件运行在客户程序进程中,客户程序与组件之间通过直接函数调用的方法进行交互,运行效率很高;但反过来组件程序直接运行在客户进程中,组件程序中的严重错误有可能引起客户进程的崩溃。

进程外组件:组件程序实现的另外一种形式是EXE程序,这种组件程序在被调用时有其自己的进程空间,组件程序与客户程序运行在各自的进程空间,成为进程外组件。

应用调用其他进程服务的顺序图: 

 

对比上图,进程外组件与客户程序交互结构图: 

 

如上图,客户程序只与同一进程的代理DLL中对象打交道,组件程序只与同一进程中的存根DLL打交道。代理DLL和存根DLL除了完成LPC调用之外,还需要对参数和返回值进行翻译和传递:

(1)   客户程序调用的参数,经过代理DLL的处理,把参数以及其他的一些调用信息组装成一个数据包传递给组件程序,这个过程成为参数列集;

(2)   组件进程接收到数据包之后,进行解包操作,把参数信息提取出来,这个过程成为散集;

(3)   进行实际的组件接口功能调用;

(4)   函数的返回值和输出参数在返回时在存根DLL中列集;

(5)   代理DLL中散集操作;

(6)   散集后的结果返回给客户程序;

(7)   如此完成一次功能调用。

6.通过注册表管理COM对象

系统注册表时一个全操作系统范围公用的信息仓库,所以客户程序和组件程序都可以方位系统注册表。组件程序把它所实现的COM对象的信息以及接口信息都保存到注册表中,称为组件注册;客户程序在创建组件对象时,也需要直接或间接地访问注册表中的信息,通常,组件对象的创建工作由COM库来完成,COM库所进行的很多操作都要依赖系统注册表提供的信息才能完成。

7.类厂

类厂,是COM对象的生产基地,COM库通过类厂创建COM对象,对应每个COM类有一个专门由于该COM类对象创建操作的类厂。类厂本身也是一个COM对象,它支持一个特殊的接口IClassFactory其定义如下:


 

CreateInstance用于创建对应的COM对象,因为每个类厂针对特定的COM类对象,所以其知道该怎样创建COM对象。LockServer函数用于控制组件的生存周期。

类厂创建COM对象,那也是COM对象的类厂又是如何创建的呢?答案是组件程序实现的引出函数DllGetClassObject。

COM库与类厂的交互

COM库常用的三个API函数:CoGetClassObject,CoCreateInstance和CoCreateInstanceEx。后两个函数实现功能一样都是创建COM对象实例,只不过后者可一次获取多个接口指针。

如下为客户程序调用COM库创建组件对象的顺序图:


 

8.COM库

如下为COM库常用函数: 

 

9.COM实现过程

进程内组件与客户的写作过程: 
 

 

 

进程外组件与客户程序写作过程: 

Excel COM加载项实现 本文介绍了使用COM技术开发Excel加载项的关键步骤:1)实现IDTExtensibility2接口的5个核心方法;2)通过C#创建COM可见类并注册;3)Excel端配置和功能集成方式;4)提供调试技巧和部署注意事项,包括32/64位系统差异。强调需正确处理COM对象释放和版本兼容性问题,并推荐参阅MSDN官方文档获取最新API参考。(150字) 阅读详情

相关推荐

【AUTOSAR COM】XCP协议实现详解:从基础概念到核心代码解析

实现展示了XCP协议的核心实现机制,通过模块化设计实现了协议的主要功能。支持更高速的传输介质(如CAN FD、Ethernet AVB)增强安全特性(AES加密、安全启动支持)集成OTA升级功能支持AUTOSAR自适应平台通过对代码的深入分析,我们可以更好地理解XCP协议的实现细节,为汽车电子系统的开发和调试提供有力支持。该实现方案在汽车标定领域具有广泛的应用价值,同时也为协议扩展和优化提供了良好的基础架构。本文中的源代码实现来源于小满开源项目。

1813

COM组件相关实现

COMCOMCOM

【AUTOSAR COM】SecOC模块技术解析:车载安全通信的核心实现

SecOC模块作为AUTOSAR安全框架的核心组件,通过认证生成与验证机制有效保障了车载通信的安全性。模块化架构:清晰的接口设计可配置性:支持多种安全策略错误处理:完整的异常处理机制性能优化:位操作、零拷贝等优化诊断集成:与诊断模块的无缝对接安全参数配置缓冲区管理故障恢复机制与CSM模块的集成安全策略的动态调整通过合理配置和使用,SecOC模块能够有效防御车载网络中的常见安全威胁,为智能汽车的通信安全提供可靠保障。

985

COM - COM编程的简单实现

本文主要记录一下COM编程的简单实现。关于COM的简单介绍可以参考文章 COM的简单介绍。 1、代码的主要结构 代码结构主要分为两部分,其中ComTest为组件程序部分,ComCtrl为客户部分(即组件的使用者),具体如下所示: 2、ComTest ComTest为 VS2012所创建的 Win32项目->DLL类型的工程。可以参考以下过程进行开发。 2.1、接口类的定义 2.2、对象类的定义 2.3、对象类厂的定义 2.4、组件自注册处理 3、ComCtrl Com...

bailang_zhizun的博客 3056

一个简单的com组件的实现

<br />1.什么是com <br /> <br />com是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。<br

zhuxiufenghust的专栏 3848

COM专题四---实现COM接口(implement COM Interface)

Prerequisite:C++ 编程者,熟悉windows编程,熟悉Win32 Dll,了解windows注册表。 作者:收割者

xinzhiyounizhiyouni的专栏 2145

COM实现

COM接口的实现机制

Gostorm 486

COM原理与实现之二: 聚合

COM原理与实现之二: 聚合C++没有同聚合等价的特性。聚合实际上是继承性的一种动态形式。而C++的继承总是静态的,是实现继承。COM是接口继承,通过聚合接口,可以做成动态配置。研究COM,主要是利用接口继承的灵活性构筑强大的系统:可配置、可插拔、可脚本化。本文不讲太多理论,详细原理参考[COM技术内幕]这本书。关于[COM技术内幕],很多内容过时了,比如注册表,类厂之类的。我更关心COM思想所蕴

6885

从0到1:windows-rs如何优雅实现COM核心接口IUnknown

你是否在Rust开发Windows应用时遇到过COM组件调用的难题?是否对IUnknown(接口未知)这个COM编程的基石感到困惑?本文将带你深入理解windows-rs库如何用Rust的安全特性封装COM编程的核心接口,通过实战案例掌握接口实现的关键技术,解决内存安全与跨语言调用的双重挑战。读完本文,你将能够:理解COM接口的Rust表示方式、掌握IUnknown三大方法的实现原理、学会使用pr...

gitblog_00264的博客 1167

COMComponent Object Model)的核心要点:从设计理念到实现细节

COM通过**接口(Interface)**定义组件的功能,而不是具体实现。接口是纯虚类,仅包含方法声明,不包含实现代码。

云小逸的博客 1004

实现一个完整项目剖析 COM 核心机制:从 vtable 到跨进程透明调用

实现一个完整项目剖析 COM 核心机制:从 vtable 到跨进程透明调用。

lza_csdn2019的博客 718

uinames.com核心算法解析:如何实现智能地区权重分配

uinames.com是一个强大的姓名生成工具,专为设计和原型制作提供真实感的姓名数据。其核心优势在于能够根据不同地区的姓名分布特征,智能分配权重并生成符合地域文化特点的姓名。本文将深入解析uinames.com实现智能地区权重分配的核心算法,带你了解其背后的工作原理。 ## 权重分配的核心思路 uinames.com的地区权重分配算法基于两个关键因素:**姓名数据量**和**随机选择概率**

gitblog_00824的博客 674

使用COM0COMCOM2TCP实现TCP转串口Win10资源文件介绍:项目核心功能与场景

使用COM0COMCOM2TCP实现TCP转串口Win10资源文件介绍:项目核心功能与场景 去发现同类优质开源项目:https://gitcode.com/ 在当前的物联网与自动化领域,数据传输的灵活性至关重要。使用COM0COMCOM2TCP工具,用户可以轻松实现TCP与串口之间的数据转换。以下是关于此项目的详细介绍。 项目介绍 本项目提供了一套在Windows 10操作系统上使用COM0CO...

gitblog_06716的博客 754

com.jacob jar包下载仓库:Java与COM交互的核心库,轻松实现自动化操作

com.jacob jar包下载仓库:Java与COM交互的核心库,轻松实现自动化操作 【下载地址】com.jacobjar包下载仓库 com.jacob是一个强大的Java库,专为与Microsoft Windows平台上的COM对象交互而设计。它使Java程序能够自动化操作Windows应用程序,适用于需要跨平台集成...

gitblog_06795的博客 479

3大核心功能解析:COM3D2.MaidFiddler如何实现游戏角色实时编辑

你是否曾为COM3D2游戏中繁琐的角色修改流程而烦恼?退出游戏、查找存档、使用外部工具、重新加载——这一系列操作不仅耗时,还容易出错。COM3D2.MaidFiddler正是为解决这一痛点而生的实时数值编辑器,让你在游戏运行时直接修改女仆角色的各项数据,享受无缝的角色定制体验。 ## 从离线修改到实时编辑:游戏角色管理的革命性转变 传统的角色修改方式存在明显的局限性。每次调整都需要完整的"退出

gitblog_00546的博客 208

UAC-BOF-Bonanza核心原理:PEB伪装加ICMLuaUtil COM接口实现任意文件执行

🔐 UAC-BOF-Bonanza 是一个把公开 **UAC 绕过(UAC Bypass)技术**武器化为 **BOF(Beacon Object File)** 的开源项目。它的核心原理是:**PEB 伪装** + **ICMLuaUtil 提权 COM 接口**,让普通权限进程伪装成 `explorer.exe`,从而通过 COM 以管理员权限执行磁盘上的任意文件。项目一次 `make` 即

gitblog_00535的博客 980

COM3D2 MaidFiddler:5大核心技术实现实时游戏数据操控

COM3D2 MaidFiddler是一款专为COM3D2游戏设计的实时数据编辑器,通过创新的进程间通信架构实现游戏内存数据的动态修改。这款开源工具让开发者能够在游戏运行时实时调整女仆角色的数百项属性参数,突破传统游戏修改工具的限制,为COM3D2社区提供了前所未有的角色定制能力。 ## 技术架构设计原理:混合语言系统实现 COM3D2 MaidFiddler采用C#/.NET插件与Pytho

gitblog_00641的博客 352

COM编程的技术基础分享

在网上看了些资料,发现这篇文章比较系统,整理一下后和大家共享。 这篇文章是给初学者看的,尽量写得比较通俗易懂,并且尽量避免编程细节。完全是根据我自己的学习体会写的,其中若有技术上的错误之处,请大家多多指正。   一、为什么要用COM   软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到现在的COM,编程,目标只有一个,就是希望软件能象积方块一样是累起来的

小木匠盖大厦 708

【免费下载】 com0com 虚拟串口驱动安装与配置指南

**项目名称**: com0com **项目简介**: com0com 是一个开源的虚拟串口驱动程序,适用于 Windows 操作系统。它允许用户创建无限数量的虚拟 COM 端口对,用于连接一个应用程序到另一个应用程序。每个 COM 端口对提供两个 COM 端口,其中一个端口的输出是另一个端口的输入,反之亦然。 **主要编程语言**: C++ #### 2. 项目使用的关键技术和框架 ...

gitblog_01230的博客 1万+
上一篇: COM的实现
下一篇: oracle文件系统解析——数据文件
Gostorm
博客等级 码龄17年 17粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值