
COM
文章平均质量分 86
Neo_Wu
这个作者很懒,什么都没留下…
展开
-
学习COM组件编程
面向对象的思想难以适应这种分布式软件模型,于是组件化程序设计思想得到了迅速的发展。按照组件化的程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不同的机器上。为了实现这样的应用软件,组建程序和组建程序之间需要一些极为细致的规范, 只有组件程序遵守了这些共同的规范,然间系统才能正常运行。为此,OMG和Micro转载 2013-01-29 23:05:00 · 758 阅读 · 0 评论 -
ATL接口映射宏详解
ATL接口映射宏详解(下) 五.COM_INTERFACE_ENTRY_AGGREGATE(iid, punk)参ATL例程COMMAP 这一节中将介绍ATL中用于聚集对象的宏。聚集对象的概念请参阅其它参考书。 现在先看一看这个宏的典型用法: class CAgg : public IDispatchImpl,public ISup转载 2013-03-27 09:20:19 · 1030 阅读 · 0 评论 -
在COM中使用数组参数-数组指针
在COM中使用数组参数-数组指针关键字:DCOM、数组、自定义类型、Marshal、SafeArray、ICollection1 使用数组指针数组指针使用标准的C/C++数组表示方式。数组中的每个元素按照顺序在内存中依次排放。数组的下标从0开始计算。数组的第一个元素(下标为0的元素)的地址就是数组的指针,数组中每个元素所占的内存空间大小必须是固定的,只和数组类型有转载 2013-04-10 22:03:00 · 1036 阅读 · 0 评论 -
COM 技术介绍
一、COM介绍 1、定义 (Component Object Model) COM是微软公司的最高级的,包罗万象的二进制通讯规范(也就是说是大家都要遵守的合同)。用于软件组件间跨进程,跨机器,和操作系统进行交互操作。COM是透明位置的。它可以在EXE,DLL或者远程机器上使用。 OLE是一个主要与用户界面相关的高级功能的集合。COM和OLE的概念界限原本就不转载 2013-04-15 15:07:08 · 966 阅读 · 0 评论 -
ATL COM 宏
COM_INTERFACE_ENTRY (ATL)输入接口COM接口映射。COM_INTERFACE_ENTRY( x )参数x[in]您的选件类对象直接从派生接口的名称。备注通常,这是通常使用的项类型。翻译 2013-04-15 14:45:01 · 1193 阅读 · 0 评论 -
Delphi COM编程技术三类型库
在COM组件的使用和开发过程中经常需要获取有关组件的信息。而COM组件以二进制代码的形式发布,如果不借助特定的工具这些相关信息将难以被获取。通过访问类型库就可以查看COM组件的信息。一、类型库的基础知识介绍:1、类型库的定义:类型库:在类型库中以二进制的形式描述了一个或多个对象的类型信息。具体的类型信息包括:组件的CLSID、所支持接口的IID、接口的成员函数及其参数和返回转载 2013-04-16 10:55:19 · 954 阅读 · 0 评论 -
关于COM中变体类型VARIANT
从com的设计初衷来讲,要达到跨语言的目的,但是c++啊,java,python,pascal什么的都是有自己的数据类型的,设计这个变体类型VARIANT就是为了达到这个目的,之所以称之为变体类型是因为它的类型不是固定的,基本上可以表示COM里面的任何基本类型和常见接口指针,从c++的本质来讲,VARIANT类型就是一个结构体,该结构体中有一个成员是表示该变量到底是个什么变量,也就是应该把这个表示转载 2013-04-16 11:12:19 · 1618 阅读 · 0 评论 -
COM 代理存根模式下COM组件的实现和加载
呵呵,多年没有搞COM相关的东西,这次由于公司项目的需要又重新学习了COM中与项目相关的部分技术,不过COM技术还是博大精深,敝人也是初探皮毛。本BLOG是对在代理/存根模式下COM组件调用的方法与兄弟们探讨一下。希望能对大家有所帮助。 COM组件对外输出接口有两种模式:TLB库((Type Library)模式和代理/存根(Proxy/stud)模式。如果COM组件是通过TLB转载 2013-04-16 11:42:57 · 2147 阅读 · 0 评论 -
来自 COM 经验的八个教训
在日常工作中,我看到过许多由不同开发人员编写的 COM 代码。我为许多富于创造性的使用 COM 的工作方式感到惊讶,有一些使 COM 工作的巧妙代码可能连 Microsoft 都没有想到。同样,看到一些错误一次又一次地重犯,使我免不了心灰意懒。这些错误很多都与线程和安全有关,完全不成比例,而这也正是 COM 文档资料中最缺少的两个领域。如果不仔细计划,它们也是最可能遇到的并可能会绊住您的两个领域。转载 2013-04-21 23:04:51 · 1033 阅读 · 0 评论 -
COM多线程原理与应用
COM多线程原理与应用目录:COM多线程原理与应用目录:前言:套间:套间的定义:套间的分类:套间的进入和退出:对象的同步:组件对象的同步:COM对象线程模型:进程内对象线程模型的种类:ATL对多线程的支持:对象引用的保护:成员变量的保护:COM+导致的变化:上下文概述:上下文对象:调用对象: 前言:COM多线程转载 2013-05-08 17:39:49 · 891 阅读 · 0 评论 -
用VC进行COM编程所必须掌握的理论知识
l(作为一个初学者,觉得本文挺好,推荐给大家)这篇文章是给初学者看的,尽量写得比较通俗易懂,并且尽量避免编程细节。完全是根据我自己的学习体会写的,其中若有技术上的错误之处,请大家多多指正。 一、为什么要用COM 软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到现在的COM编程,目标只有一个,就是希望软件能象积方块一样是累起来的,是组装起来的,而不是一点点转载 2013-05-13 19:06:34 · 913 阅读 · 0 评论 -
CComPtr和CComQIPtr
CComPtr和CComQIPtr CComPtr和CComQIPtr是智能接口指针类,它们在销毁的时候,不需要手动去释放接口指针,在赋值的时候,也不需要手动的AddRef,在出现异常的时候,会自动处理异常,而不需要额外的异常处理代码。 CComPtr和CComQIPtr的不同的地方:CComPtr只能创建固定的特定的接口指针实例。而CComQIPtr不但实现转载 2013-05-28 14:13:26 · 1407 阅读 · 0 评论 -
COM服务器的伪异步技术及其实现
摘要:COM组件技术在Windows操作系统中发挥了极其重要的作用,但标准COM组件技术在实时操作性上不尽完善。作为补充可以用COM连接点技术和多线程技术来构造一种伪异步技术, 完成某些前者不能完成的任务。本文详细描述了其实现原理,并根据技术细节提供了作者的解决方案。 关键词: COM;异步调用;连接点;接口;STA; MTA 1. COM异步技术 与普通同步执行的COM服务器不同转载 2013-05-30 11:16:29 · 885 阅读 · 0 评论 -
COM组件间调用的性能问题
多线程编程是大家都比较头疼的问题,不小心就会碰到死锁,野指针,同步调用问题等等,虽然在客户端编程方面会带来不少好的体验,比如界面和处理在不同的线程,则不会卡住界面,但是相对于他的副作用来说,让不少人还是望而却步。 QQ 客户端就是这样一个例子,从QQ重构的3个大版本来说,也一直在回避这个问题。Hummer在设计的时候为了防止编程的复杂性和后期的难以维护,也主动放弃了多线程特性(部分底层,转载 2013-06-08 16:33:01 · 1814 阅读 · 0 评论 -
Advanced COM Interop
COM与.NET的交互.NET framework 是从COM的一种自然地进步,因为这两个模型共享了许多中心的主题,包括组件重用和语言中立。为了支持向后兼容,COM interop提供了不需要修改现有组件而能访问现有COM组件的方法。可以通过使用COM interop工具导入相关的COM类型来合并COM组件到.NET Framework的应用中。一旦导入,COM的类型就可以使用了。转载 2013-11-16 00:31:43 · 1123 阅读 · 0 评论 -
DCOM列集散集的内部具体实现的研究初探。
我也不罗嗦什么理论基础,相信看这篇文章的人肯定对COM有一定的功底了。下面的介绍只是我对COM实现的自己的理解因此肯定有错误的地方,目的是希望大家指出和讨论,以求共同进步。1.套间的注册 无论是在服务器端还是在客户端,首先执行的总是CoInitialize来建立一个STA或者MTA套间。每个套间由一个8字节的数字唯一标识称为OXID, 当调用CoInitialize转载 2013-11-16 15:33:27 · 1156 阅读 · 0 评论 -
C# 互操作性入门系列(一):C#中互操作性介绍
本专题概要:引言平台调用C++ Interop(互操作)COM Interop(互操作) 一、引言 这个系列是在C#基础知识中遗留下来的一个系列的,因为在C# 4.0中的一个新特性就是对COM互操作改进,然而COM互操作性却是.NET平台下其中一种互操作技术,为了帮助大家更好的了解.NET平台下的互操作技术,所以才有了这个系列。然而有些朋友们可能会有这样的疑问—转载 2013-11-19 21:40:37 · 1784 阅读 · 0 评论 -
C# 互操作性入门系列(四):在C# 中调用COM组件
本专题概要:引言如何在C#中调用COM组件——访问Office 互操作对象在C# 中调用COM组件的实现原理剖析错误处理小结 一、引言 COM(Component Object Modele,组件对象模型)是微软以前推崇的一个开发技术,所以现在微软的很多产品都用到了COM组件,如Office,IE 等。然而如果.NET 平台下的程序想访问COM组件的方式来实现某个功能怎么办呢转载 2013-11-19 21:53:53 · 1884 阅读 · 0 评论 -
ATL中IUnknown接口的实现(一)
ATL和MFC都能作为开发COM的工具,而ATL是一个Template Library,MFC却是一个Framework,作为Template Library,其优势在于其只是提供给程序员形式各异,可以用来构建软件的小积木,由程序员的意愿架构出任意形状的软件大厦;而FrameWork却是已经把大厦的主体建立好,我们只需要往里面添砖加瓦,做一些细节上的修整,以让其符合我们的要求。两者各有千秋。不过由转载 2013-04-10 10:05:34 · 1595 阅读 · 0 评论 -
COM和套间(Apartments) 1 - 基本知识
OverviewCOM技术过时了吗?这句话也对也不对。从技术上讲,确实COM的使用率在下降,但是从思想上来说,COM的面向接口的思想正在被Java和.NET发扬光大。那我们还需要和COM打交道吗?这取决于你工作的领域。虽然现在微软的平台在慢慢向着.NET迁移,不过,在维护原有非托管代码,编写和Windows系统组件打交道的程序,以及使用CLR调用非托管代码的时候,COM或多或少都是不可避免转载 2013-03-25 16:28:07 · 981 阅读 · 0 评论 -
《COM 原理与应用》学习笔记
《COM 原理与应用》学习笔记 - 第一部分 COM原理savetime2k@yahoo.comhttp://savetime.delphibbs.com开始时间:2004.1.30最后修改:2004.2.1本文排版格式为: 正文由窗口自动换行;所有代码以 80 字符为边界;中英文字符以空格符分隔。(本文内容基本上是从《COM 原理与应用》书中摘录转载 2013-02-04 11:28:11 · 1055 阅读 · 0 评论 -
COM笔记-QueryInterface函数
客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是IUnknown。它在UNKNWN.H头文件定义 :如下 Interface IUnknown { virtual HRESULT __stdcall QueryInterface( REFIID riid, void *转载 2013-02-26 13:54:33 · 502 阅读 · 0 评论 -
虚拟函数表和C++抽象基类
一.虚拟函数表 为什么用C++的纯抽象基类来实现COM接口是可行的呢?这主要是由于纯抽象类说定义的内存结构可以满足COM对接口的需求。当定义一个纯抽象基类时,实际上定义的是一个内存块的结构,且其所有的实现都是一些具有相同的基本结构的内存块。但是,此内存只有在派生类中实现此抽象基类时才会被分配。继承抽象基类的派生类,也将继承此内存结构。[cpp] v转载 2013-03-28 21:56:44 · 1093 阅读 · 0 评论 -
COM笔记-引用计数
com组件将维护一个称作是引用计数的数值。当客户从组件取得一个接口时,此引用计数值将增1。当客户使用完某个接口后,组件的引用计数值将减1.当引用计数值为0时,组件即可将自己从内存中删除。 为什么要选择为每一个接口单独维护一个引用计数而不是针对整个组件维护引用计数呢?主要有两个原因:一是使程序调试更为方便;另外一个原因是支持资源的按需获取。1程序调试:假设在程序中忘记对某个转载 2013-03-28 22:27:25 · 844 阅读 · 0 评论 -
C++中智能指针的设计和使用
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函转载 2013-03-28 22:52:33 · 673 阅读 · 0 评论 -
什么是代理和存根 ?
打个比方,你到自动取款机上去取款;你就是客户,取款机就是你的代理;你不会在乎钱具体放在那里,你只想看到足够或更多的钱从出口出来(这就是com的透明性)。你同银行之间的操作完全是取款机代理实现。 你的取款请求通过取款机,传到另一头,银行的服务器,他也没有必要知道你在哪儿取钱,他所关心的是你的身份,和你取款多少。当他确认你的权限,就进行相应的操作,返回操作结果给取款机,取款机根据服务器返回结果,转载 2013-03-28 23:43:54 · 1593 阅读 · 0 评论 -
有效的使用和设计COM智能指针—条款4:理解ATL的CComPtr提倡简单
条款4:理解ATL的CComPtr提倡简单,高效微软推出COM SDK后很快就意识到直接使用SDK开发COM是一件很困难的事情。于是他所做的第一件事情是将COM集成到MFC中去。但是随着Internet的发展,分布式组件要求COM能在网络上传输,但这却给MFC开发COM组件带来了相当大的障碍——MFC臃肿、庞大而且还要依赖很多DLL文件。在这种情况下ATL诞生了。ATL【2】是Acti原创 2013-03-28 23:16:17 · 1022 阅读 · 0 评论 -
ATL_NO_VTABLE详解
我们可以注意到在用ATL编写COM组件时,在类前面都有一个宏ATL_NO_VTABLE,那么这个宏到底有什 么作用呢?这个宏的定义如下: #define __declspec(novtable) ATL_NO_VTABLE; 下面这段是MSDN中对这个宏的描述: This form of转载 2013-03-30 14:34:25 · 1003 阅读 · 0 评论 -
COM笔记-QueryInterface函数
客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是IUnknown。它在UNKNWN.H头文件定义 :如下 Interface IUnknown { virtual HRESULT __stdcall QueryInterface( REFIID riid, void **转载 2013-03-30 14:29:13 · 902 阅读 · 0 评论 -
【C++】【CPR】浅析远程过程调用 RPC
一、什么是远程过程调用 什么是远程过程调用 RPC(Remote Procedure Call)? 你可能对这个概念有点陌生, 而你可能非常熟悉 NFS, 是的, NFS 就是基于 RPC 的. 为了理解远程过程调用,我们先来看一下过程调用。 所谓过程调用,就是将控制从一个过程 A 传递到另一个过程 B, 返回时过程 B 将控制进程交给过程 A。目前大多数系统中, 调用转载 2013-03-18 14:26:28 · 1404 阅读 · 0 评论 -
《COM技术内幕》图摘
摘取《COM技术内幕》的一些图示,助于理解COM实现细节。 1. CoCreateInstance的内部实现细节2. 被聚合组件的IUnkown接口实现3. DECLARE_IUNKNOWN宏4. 通过Win32LPC技术实现跨进程调用分享到: 上一篇:浅谈Base64编码转载 2013-03-31 15:18:51 · 1253 阅读 · 0 评论 -
COM笔记-接口
普通接口实例(vs2008)代码下载:http://www.box.net/shared/tlke8tb7j9#include using namespace std; #include // Define interface. /* 输出一个字符串*/void trace(const char* pM转载 2013-03-31 17:51:10 · 827 阅读 · 0 评论 -
COM笔记-包容与聚合
扩展c目录(?)[+] COM不支持实现继承的原因在于这种继承方式将使得一个对象的实现同另外一个对象的实现紧紧地关联起来。在这种情况下,当基类的实现被修改后,派生类将无法正常运行而必须被修改。这就是为什么一些用C++编写大型程序的专家们强烈建议人们基于抽象类来构建应用程序。因此,为了保证以组件的修改不会影响应用程序的正常运行,COM并不支持实转载 2013-03-31 17:43:55 · 874 阅读 · 0 评论 -
RPC远程过程调用
RPC远程过程调用 在顾客服务员模型中,进程之间的相互作用是由一个进程先向另一个进程发送一个报文请求服务,然后等待回答;服务进程接收一个请求,然后发送回答。这样一种交互作用很象通常意义的过程调用。但是在计算机网络系统中,这种调用可能在不同的机器上执行,因此称为远程过程调用(remote procedure call)。远程过程调用的基础是XDR协议。 11.1转载 2013-04-01 16:02:26 · 3645 阅读 · 0 评论 -
COM编程中的接口查询QueryInterface的实现原理
我们都知道,COM组件编程中,QueryInterface实现的接口之间的查询,通过这个接口,我们可以获取该组件中其他的接口。但是,QueryInterface实现的原理是什么呢,首先,我们看一下基本的COM实现。一般来说,COM是 通过多继承实现多个接口,如下图 而对应的QueryInterface实现如下HRESULT 实现类::QueryInterface(转载 2013-03-31 17:12:16 · 2959 阅读 · 0 评论 -
COM 组件对象的基本模仿
[cpp] view plaincopy#include #include using namespace std; //类型定义和宏定义 typedef string REFIID; typedef unsigned long HRESULT; typedef unsigned long ULONG; #de转载 2013-03-31 15:35:42 · 969 阅读 · 0 评论 -
C++中建立对象间消息连接的系统方法
用过C++进行过面向对象程序设计的用户都知道,程序中的对象很少单独存在。不考虑对象间的相互作用几乎是不可能的。所以,标识对象间的关系或建立对象间的消息连接是面向对象程序设计的一项重要任务。本文着重从C++程序设计的角度,提出一种建立对象间消息连接的实用方法。如果你想详细了解面向对象程序设计技术,请参阅有关专著。 大家都知道对象是数据和方法的封装体。在C++中,它们分别表现为数据成员和成转载 2013-03-19 10:54:57 · 719 阅读 · 0 评论 -
c#的返回值错误处理与异常处理
1、返回值判断这个错误处理的方法是最普遍的,也是在过程化程序设计中的经典的错误处理方法。至今也是最多人使用的方法。代码的编写是这样的:int nRet = DoThing1();if(nRet != SUCCESS){ cout if((nRet == -1) cout if(nRet == -2)转载 2013-11-24 23:16:46 · 3208 阅读 · 0 评论