我的COM学习笔记

C++ COM学习笔记(一)浅谈COM初始化 com提倡的就是灵活,只有减少公开性才能减低耦合,在创建COM实例是也是如此,所有的COM实例都是通过CoCreateInstance()函数创建,那么怎么才能通过这一个API创建出自己现有的实例对象呢? 我们可以先看看函数原型 STDAPI CoCreateInstance( REFCLSID rclsid, //Class identifier (CLSID) of t 阅读详情

下面这个东西是我在01年学习COM时的一个笔记,原来发表在腾讯社区里,并被收入C/C++板块的精华区中。近日重拾COM,将它稍做修改,挪到这里,以便查找。

=====================================

2001.5.30
1.何谓组件?
组件(component)就是一个软件模块,专门用来完成特定的预定工作,实现二进制级的代码复用。

 
2.何谓COM?
COM,即Component Object Model(组件对象模型)。它不是编程语言,而是一套构造二进制兼容软件组件的规范。依照这个规范可以建立能够相互通信的软件组件,而不管这些组件使用什么语言或工具建立的。


3.COM术语
组件代码(Component Code):就是实现组件功能的代码。
接口(Interface):是一组公用功能定义,是组件向程序或其他组件提供的,用来说明本组件的功能,以及如何使用这些功能的方法集。
GUID(Globally Unique Identifier,全局唯一标识符):为一个128位整数,用来向操作系统和应用程序唯一标识这个组件。
二进制兼容性(Binary compatibility):无论组件用什么语言建立,它都与其它COM组件兼容和可供其他组件使用。


4.函数应返回HRESULT
COM接口的所有方法,除IUnKnown::AddRef和IUnKnown::Release外,返回类型都应为HRESULT,HRESULT是状态码。可以用GetScode()将此状态码转换成更详细的SCODE。

 
5.COM组件的实现规则
实现IUnKnown规则
内存管理规则:管理内存就是管理指针。
引用计数规则


2001-5-31
1.如何实现自定义接口?
利用MIDL(Microsoft Interface Definition Language),它是基于Open Software Foundation Distributed Computing Environment 的 Remote Procedure Call IDL。

 
2.IDL文件
import "oaidl.idl";//此文件包括IDispatch接口的定义,import相当于#include
import "ocidl.idl";

[
     object,//COM接口定义
     //ICTAddIn接口唯一标识符(GUID)
     uuid(9EDADF6F-C069-11D1-A446-0000E8D2CD0A),
     dual,//表示客户机可用两种方法访问这个接口
     helpstring("ICTAddIn Interface"),//将提示字符串与此接口建立联系
     pointer_default(unique)//指定除参数表中所列属性之外所有指针的缺省特征,unique表示指针可以是NULL,但不支持别名
]
interface ICTAddIn : IDispatch
{
   [id(1), helpstring("Insert code template.")] HRESULT CTInsCodeTmpl();
};
[
    uuid(9EDADF62-C069-11D1-A446-0000E8D2CD0A),
    version(1.0),
    helpstring("CodeTmpl Add-in Type Library")
]
library CODETMPLLib //类型库
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    importlib("devshl.dll");
    importlib("ide/devdbg.pkg");

[
    uuid(9EDADF70-C069-11D1-A446-0000E8D2CD0A),
    helpstring("CodeTmpl - Code Template Add-in")
]
coclass CTAddIn //组件类
{
   [default] interface ICTAddIn;
};
};


3.用ATL建立COM服务器
要用ATL建立COM组件,就要生成从至少另外两个类派生的类:CComObjectRoot和
CComCoClass。此外,还要从你的类派生CComObject类。

最后整理:2003-6-26  

【数据集】30 m地表温度LST数据集 阅读详情

相关推荐

akshare 布林通道策略

import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'.

qq_26742269的博客 5336

我的COM和ATL的学习

首先声明本人并非COM/ATL高手,尽管本人接触他们已经有4年了,但是因为工作中的一些原因一直未能深入研究和广泛的实际的使用它们。不过回想学习它们的痛苦经历,实在是有点不堪回首。在此仅以此文和大家探讨一下学习它们的路径,以让后来人少走弯路。我个人认为学习COM是一件不简单的事情,只有一步一个脚印踏踏实实的理解每个观点和理论才能真正懂得其精髓。那样才能在发生错误的时候,依靠自己的知识解决问题。我个人

梦中江湖——vcleaner 4149

贝叶斯校准在计算机模型不确定性分析中的实践指南

本文深入探讨了贝叶斯校准在计算机模型不确定性分析中的核心原理与实践方法。通过将模型从“黑箱”转变为“透明箱”,该方法系统量化了参数不确定性、模型结构缺陷及观测误差。文章重点阐释了如何利用高斯过程作为代理模型和模型不足函数,构建完整的贝叶斯校准框架,并提供了从数据准备、模型训练到MCMC推断及不确定性分析的实战指南,最终实现更可靠的预测与决策支持。

weixin_29088655的博客 292

《COM 原理与应用》学习笔记

《COM 原理与应用》学习笔记 - 第一部分 COM原理 按:文章对COM原理具有高度总结性,推荐学习COM的朋友都看一看,COM注定要淘汰的,但学习COM的编程思想是非常有意义的。   dREAMtHEATER推荐必属佳品   《COM 原理与应用》学习笔记 - 第一部分 COM原理   savetime2k@yahoo.com     (本文内容基本上是从《COM 原理与应用》书中摘录,版权由

linuszhu的专栏 2412

Mac上SSH连接神器SecureCRT:从安装到高效使用的完整指南

本文详细介绍了Mac上专业SSH连接工具SecureCRT的安装与高效使用技巧。从核心优势、会话管理到快捷键方案,全面解析如何提升远程开发与服务器管理效率。特别适合需要处理多服务器环境和复杂终端控制的Mac用户,SecureCRT的企业级加密和跨平台同步功能使其成为SSH连接的神器。

weixin_30642561的博客 493

《QMT量化实战系列》支持自定义筛选与排序的多因子策略,实测年化收益超100%

【QMT量化实战系列】推出《支持自定义筛选与排序的多因子策略》,通过Tushare获取38个核心因子数据,实现股票多维筛选(剔除ST股、次新股及特定板块)。策略创新性地采用多因子加权排名机制,通过(股票数-排名+1)/股票数*100的算法计算各因子得分,支持自定义权重组合。该策略提供完整代码及详细注释,涵盖数据获取、因子筛选、权重排序等核心环节,帮助用户构建个性化量化模型。系列内容每月更新1-2期,由浅入深讲解QMT平台实战应用。

qq_46262068的博客 1255

《COM技术内幕学习笔记》

《COM技术内幕学习笔记》说是学习笔记实际上是文中一些,自己觉得重要的地方的摘录。。觉得写的很不错。最近一段时间。自己接触到的一个有关COM 思想的东西。所以找了这本书来看看。顺便摘录其中的一些东西。和大家一起学习。欢迎转载。唯一要求是请注明出处和作者。共同努力吧。作者:苦孩子blog地址:http://blog.youkuaiyun.com/kuhaizi对com来说,接口是一个包含一个函数指针数组的内存结

kuhaizi 1755

【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真

本文设计并仿真了基于PID控制的四旋翼无人机系统。首先,建立了四旋翼无人机的数学模型,涵盖了无人机的动力学和控制系统。通过PID控制器对四旋翼的姿态和位置进行控制,以实现其稳定飞行。使用MATLAB/Simulink对该系统进行仿真,验证了PID控制算法在四旋翼控制中的有效性。仿真结果表明,PID控制能够较好地调节四旋翼的飞行姿态,并有效抑制外部干扰,使得无人机能够保持平稳飞行。

2401_84610415的博客 1804

《COM原理及应用》学习笔记之第一章

第一章 概述 1、组件的设计的原始目的跨平台、跨网络、积木式搭建程序 2、组件的两个规范:CORBA 和COMOMC(Object Management Group,对象管理组织)的CORBA(Common Object Request Breaker Arehitecture ,公共对象请求中介体系结构)。Microsoft的COM(Component Objedt

ZhangXinbin的专栏 3364

【AutoSAR CAN】04 - 如何使用Davinci Configurator Pro工具配置CAN的波特率

改参数为Tx Arbitration start delay value ,可用于延迟仲裁过程的起始点,用来补偿CAN收发器及线路的传输延迟,以优化传输性能。有关详细信息,请参阅硬件手册。该参数指定采样点模式,即选择多少个采样点的数量,如果选择了每比特三个样本选项,则该点标记第三个样本的位置;我们要配置CAN的波特率,其实就是要弄明白 CAN 控制器的位时序即可,具体的理论部分和EB的配置部门可参考文章《该参数表示传播延迟有多少个时间单位Tq,即上文中的Propagation delay/PROGSEG。.

2601

基于 MFC C++ 的心电监测客户端

4. **报警功能**:使用 `PlaySound` 播放报警音(需准备 `alert.wav` 文件),界面显示报警状态。

寒寒豆豆软件公司的博客 90

AUTOSAR学习笔记之COM模块

AUTOSAR COM

xiaoxingzi_gxz的博客 2296

RK3588多核NPU并行加速yolo优化教程:基于线程池的高性能推理实现

本教程详细介绍了RK3588多核NPU的并行加速优化方法。RK3588搭载三个独立NPU核心,总计算能力达6TOPS,但传统单线程方式无法充分发挥其性能。文章从硬件架构分析入手,详细讲解了三核心独立处理架构和多种工作模式,并通过代码示例展示了线程池技术的实现原理。线程池通过预创建工作线程、任务队列和条件变量等核心组件,避免了频繁创建线程的开销,能显著提升NPU的并行处理效率。教程还提供了性能计算公式和内存带宽优化策略,帮助开发者最大化利用RK3588的硬件算力,实现高性能AI推理。

LXY_LOVE36的博客 1023

COM编程学习笔记

平时分析病毒时,难免遇到一些用COM的,分析这种时比较头疼。找到一篇老外写的文章,通俗易懂,跟着练习了一把,消除对COM的陌生感! 文章地址 : https://www.codeproject.com/Articles/633/Introduction-to-COM-What-It-Is-and-How-to-Use-It https://www.codeproject.com/Articles...

Sven的忘却日记 1005

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

COM学习笔记1_COM初步探索

COM组件的两个重要需求:1。 动态链接2。 隐藏实现细节COM初步探索一个典型C++客户和组件的例子// 组件模块interface IX{ virtual void __stdcall Fx1() = 0 ; virtual void __stdcall Fx2() = 0 ;} ;interface IY{ virtual void

hongjiqin的专栏 1440

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

COM 学习笔记

好久没有写博客了,今天记录下,作为一个程序猿,多记录点东西还是好的。最近比较懒,总是想写点东西来着,终于动手了,当你觉得晚的时候恰恰是最早的,勉励下自己 梳理一下一个进程内的 COM 组件,从代码组织到真正创建的过程 1. 首先前期编译的时候,利用ALT模板可以方便的将创建 COM对象的函数加入到一个特定的段中,这一点利用了编译器的特性,首先创建一个 类似于 SA 段,命名为s

my_et的专栏 782

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

《COM本质论》学习第一章

COM本质论学习笔记

csdn_gddf102384398的博客 236

《COM原理及应用》学习笔记之写在后面的话

        从四月份开始就看《COM原理及应用》,边看边做笔记,终于在暑假结束的时候看完了,都发上去给大家看看,希望能够多多交流。        笔记中的有些只有标题没有内容,这是由两个原因造成的:一是不太好做笔记的,二是一些书上的原图没有考贝过来。        再者,有些内容整理得不够详细或者存在有错误的地方,有时间再看时整理完后会重新发布。        有问题的地方希望能给

ZhangXinbin的专栏 3909

com学习笔记之一

                                早就想学习COM方面的技术了,可是水平有限,看了老长时间还是连最基本都看不懂,最近发现了一本DirectShow方面的书,看到关于COM的一些基本的知识,讲的也不多,看了看觉得挺好,还可以理解,遂写下了笔记。     先写一下伪代码,然后再作分析。        CoInitalize(NULL);      

Jiao2_vc的专栏 978

COM学习笔记(三):动态链接(code)

动态链接: //从DLL中输出函数Create.h: extern "C" IUnknown* CreateInstance(){ IUnknown* pI = (IUnknown*)(void*)new CA; pI->AddRef(); return pI; } //cmpnt1.def ; ; Compnt1 module-defineition filel

yangchuankai's blog 814

COM学习笔记

COM,组件对象模型。 COM思想,面向组件编程。普通的类只是代码级的重用,需要重新编译。优点:1.利于重用。2.便于升级。3.便于开发的分工合作。4.便于软件的定制 重要概念:接口,用纯虚类实现。只有接口是暴露给客户程序的。 要使用组件:1.获取接口指针。为了在不暴露组件的情况下获得接口指针,COM提供工厂函数导出函数 DllGetClassObjec t负责

lp3331的专栏 363

【COM编程】从C++到COM,学习笔记

转载自:http://blog.youkuaiyun.com/netanimals/article/details/6863403 COM的产生   一. 为什么要引入COM? 先给一个答案:COM的产生是为了解决OLE技术。当然今天OLE已经变成了COM的一个成功应用例,就好比牛顿当初发明微积分是为了解决物理运动问题,但是今天物理运动问题只是微积分的一个应用而已——以上不

每一次对问题的深究,总会收获新的知识和体会 1739

《COM原理与应用》学习笔记——COM的实现

一、进程内组件和进程外组件 前面说过,COM组件支持进程内组件和进程外组件两种方式。进程内组件的优势就是快、方便,但是如果组件里面有哪个地方崩溃了也会导致主进程的崩溃。进程外组件虽然比较慢,但是很稳定。如果组件某个地方崩溃了,最多就是没有结果,不会导致主进程的崩溃(比如,看到了浏览器插件崩溃了,没见到浏览器崩溃吧)。用户在使用COM组件的时候,实际上是感觉不出来进程内组件和...

baiyongjianai6584的博客 271

COM学习笔记6_COM的复用:包容和聚合

继承可分实现继承和接口继承接口继承 :一个类只能继承另一个接口。一个接口是里面只有纯虚函数,没有数据和函数实现实现继承 :一个类继承另一个类,包括基类中的各种数据和实现COM不支持实现继承,因为实现继承会造成较大耦合,违背了COM的思想。COM实现复用可采用包容和聚合--------------------------------------------------

hongjiqin的专栏 1641

COM学习笔记1

在学习COM时,对COM的一大堆实现原理看了一大通,基本上想自己理解了。于是想现在该我来写一个COM了吧,但打开IDE却不知如何下手。我该怎么办? 在网上一收发现一个叫杨老师的前辈已经给我写了一个详细的教程,照着一步一步的做,编译,链接。哈哈 我的COM组件出来了。  于是想

走出憧憬的专栏 1333
上一篇: 利用.NET的Reflection增强对象工厂的扩展性
下一篇: 关于软件复用的思考
sam1111
博客等级 码龄26年 18粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值