COM
安静平和
这个作者很懒,什么都没留下…
展开
-
COM三大接口:IUnknown、IClassFactory、IDispatch
(1)COM组件有三个最基本的接口类,分别是IUnknown、IClassFactory、IDispatch。(1、1) COM规范规定任何组件、任何接口都必须从IUnknown继承,IUnknown包含三个函数,分别是 QueryInterface、AddRef、Release。这三个函数是无比重要的,而且它们的排列顺序也是不可改变的。QueryInterface用于查询转载 2015-11-18 15:44:47 · 1437 阅读 · 0 评论 -
COM 组件设计与应用(五)——用 ATL 写第一个组件
本文摘自:http://www.vckbase.net/index.php/wv/1215 一、前言如果你在使用 vc5.0 及以前的版本,请你升级为 vc6.0 或 vc.net 2003;如果你在使用 vc6.0 (ATL 3.0)请阅读本回内容;如果你在使用 vc.net(ATL 7.0)请阅读下回内容;(当然读读本文内容也不错)这第一个组件,除了所转载 2016-01-10 22:41:38 · 1101 阅读 · 0 评论 -
COM 组件设计与应用(七)——编译、注册、调用
本文摘自:http://www.vckbase.net/index.php/wv/1218一、前言上两回中,咱们用 ATL 写了第一个 COM 组件程序,这回中,主要介绍编译、册和调用方法。示例程序你已经下载了吗?如果还没有下载,vc6.0 的用户点,vc.net 的用户点这里。二、关于编译2-1 最小依赖转载 2016-01-10 22:49:20 · 1365 阅读 · 0 评论 -
COM 组件设计与应用(八)——实现多接口
本文摘自:http://www.vckbase.net/index.php/wv/1219一、前言 从第五回开始到第七回,咱们用 ATL 写了一个简单的 COM 组件,之所以说简单,是因为在组件中,只实现了一个自定义(custom)的接口 IFun。当然如果想偷懒的话,我们可以把 200 个函数都加到这一个接口中, 果真如此的话,恐怕就没有人喜欢转载 2016-01-10 22:55:28 · 1192 阅读 · 0 评论 -
BSTR
为什么需要BSTRCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。●C++ 字符串是以0结束的ASCII或Unicode字符数组。●Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。●Java字符串是以0结束的Unicode字符数组。需要定义一种通用的字符串类型,可以很容易的匹配到不同编程语言转载 2016-02-22 14:18:03 · 869 阅读 · 0 评论 -
COM中的OLECHAR ,BSTR和CComBSTR 的理解和应用
1. OLECHAR 一般COM中用OLECHAR来表示字符,如果在win32系统中,OLECHAR就是 wcahr_t 如果是在win16系统中,那么OLECHAR就是 char 2. BSTRBSTR是带有字符串长度信息的以NULL结尾的一个OLECHAR数组。 (1)BSTR的创建: SysAllocString,也转载 2016-02-22 14:22:42 · 1706 阅读 · 0 评论 -
进程内COM与进程外COM
1、进程内和进程外ComCOM/DCOM 组件可以在DLL 或EXE 文档中实现。其中在 DLL 中实现的COM/DCOM组件称为 In-Process Server,因为这些组件是加载到使用它们的客户端应用程序执行程序内存之中。因此当应用程序调用COM/DCOM 组件的服务时,就和一般的程序或函数调用一样,非常快速。在EXE 中实现的COM/DCOM组件是执行在它自己的执转载 2016-02-26 14:52:24 · 3400 阅读 · 0 评论 -
线程间 COM实例的传递
我有一个进程外的ATL COM, A线程创建了COM的实例,B线程想调用该COM的部分接口。直接传递COM指针,系统提示,应用程序调用一个已为另一线程整理的接口。翻了网上的文章,说是线程间共享组件,必须使用,CoMarshalInterThreadInterfaceInStream,CoGetInterfaceAndReleaseStream。但那是基于IUNKNOWN接口的COM接口,我的进程间转载 2016-02-26 15:18:14 · 2438 阅读 · 0 评论 -
C++ 进程外COM 传递数组
1、进程外COM与进程内COM传递数组的区别: 在进程内COM定义函数: void fun(int* p1,int num1){编写方法,p是指向int类型的数组指针,num是数组的长度}在main里面{定义数组 int* p=new int[3]; 调用方法fun(p,3);}这样是没有问题的,因为main中的p原创 2016-02-26 16:40:02 · 1949 阅读 · 1 评论 -
COM 组件设计与应用(四)——简单调用组件
本文摘自:http://www.vckbase.net/index.php/wv/1211一、前言 同志们、朋友们、各位领导,大家好。 VCKBASE 不得了, 网友众多文章好。 组件设计怎么学? 知识库里闷头找! 摘自---杨老师打油集录转载 2016-01-10 22:37:57 · 974 阅读 · 0 评论 -
COM 组件设计与应用(三)——数据类型
本文摘自:http://www.vckbase.com/index.php/wv/1206一、前言上回书介绍了GUID、CLSID、IID和接口的概念。本回的重点是介绍 COM 中的数据类型。咋还不介绍组件程序的设计步骤呀?咳......别着急,别着急!孔子曰:“饭要一口一口地吃”;老子语:“心急吃不了热豆腐”,孙子云:“走一步看一步吧” ...... 先掌握必要的知识,将转载 2016-01-10 22:10:15 · 1872 阅读 · 0 评论 -
创建COM组件的原理
IUnknown *pUnk = NULL;IObject *pObject = NULL;CoInitialize(NULL);CoCreateInstance(CLSID_Object, CLSCTX_INPROC_SERVER, NULL, IDD_Unknown, (void**)&pUnk);pUnk->QueryInterface(IID_IObject, (void*转载 2015-12-31 10:15:44 · 1999 阅读 · 0 评论 -
COM中GUID和UUID、CLSID、IID
(今日看到网络上关于"COM中GUID......"文章,写的好,故记录之.)当初微软设计com规范的时候,有两种选择来保证用户的设计的com组件可以全球唯一:第一种是采用和Internet地址一样的管理方式,成立一个管理机构,用户如果想开发一个COM组件的时候需要向该机构提出申请,并交一定的费用。第二种是发明一种算法,每次都能产生一个全球唯一的COM组件标识符。第一种转载 2016-01-05 10:57:32 · 1250 阅读 · 0 评论 -
COM组件 IDispatch 及双接口的调用
一、前言前段时间,由于工作比较忙,没有能及时地写作。其间收到了很多网友的来信询问和鼓励,在此一并表示感谢。咳......我也需要工作来养家糊口呀......上回书介绍了两种方法来写自动化(IDispatch)接口的组件程序,一是用 MFC 方式编写“纯粹”的IDispatch 接口;二是用 ATL 方式编写“双接口”的组件。二、IDispatch 接口和双接口使用者转载 2016-01-21 15:41:00 · 5146 阅读 · 1 评论 -
图文并茂 简单 ATL COM开发
1.打开vs2010,新建ATL COM 项目,如下图1 2.勾选 【支持COM+ 1.0】和【支持部件注册器】 3 添加了一个com项目,在项目名称上点击右键,添加类,如下图 然后打开如下窗口,选择ATL简单对象即可。 然后是如下窗口,在简称一栏中输入类名称FirstClass,其他输入框会自动填写,然后点击完成即可。如果出现提示【转载 2016-01-21 16:02:31 · 1362 阅读 · 0 评论 -
COM组件设计与应用(一)——起源及复合文件
本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8883.html一、前言 公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:“小杨呀,以后写程序就和搭积木一样啦。你赶快学习一些OLE的技术吧......”,当时我心里就寻思 :“开什么玩笑?搭积木方式写程序?再过100年吧......”,但作为一名听话的转载 2016-01-09 17:10:44 · 1602 阅读 · 0 评论 -
COM组件设计与应用(二)——GUID和接口
本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8884.html一、前言 书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了。那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数据的时候,它该如何启动 Excel 呢?启动后转载 2016-01-09 17:53:28 · 1966 阅读 · 0 评论 -
tlb与dll文件区别
tlb文件:com类型库文件,它包含接口相关信息。在需要使用对应com类的模块里,通过"#import xxx.tlb"来调用。dll: 动态连接库,它包含二进制代码,资源... , VC可以把tlb作为资源编译到dll中。在VC下#import "A.tlb" no_namespace;编译后产生A.tlh和A.tli两个文件,不生成namespace,如果没有no_namespace,则生成的转载 2015-12-25 16:59:29 · 1224 阅读 · 0 评论 -
生成COM Dll的tlb文件的两种方法
1.开始运行oleview调出OLE/COM Object Viewer.这个工具是微软提供的,在VC6中和Windows SDK中都有。 找到要用的COM组件,比如说VBSrcirpt的正则表达式COM组件在:Type Libaray中的Microsoft VBScript Regular Expression V5.5中,双击打开后,保存成idl文件。转载 2015-12-25 17:09:50 · 3976 阅读 · 0 评论 -
进程外组件 数据传递 指针传递
我们知道进程都有自己的进程空间,都有自己的起始地址,因此在一个进程中的指针在另外一个进程中是无效的,一般在一个进程中的使用的地址类型的指针在进程之间传递时是不能使用的,经过笔者测试,如果我们传递接口指针则不会出现该问题,但要注意的是要自己实现该接口,比如IStream*现在举例如下:[cpp] view plain copy//这是测试的代码转载 2016-02-26 16:53:36 · 1326 阅读 · 0 评论