
com
世纪殇
一个不断保持前进的程序员,目前潜心在数据分析和中等网站架构设计中
展开
-
在ATL接口中添加自定义函数
一般而言,我们会在dll接口,即使想要在内部实现某些更小模块也只消在继承该机口的类中添加功能函数,但是仅仅这样,该功能函数是不能暴露给外部使用的,其作用域只在类的内部,所以怎样才能给接口添加自定义函数,同时暴露出来呢? 这就要说到idl了,即interface description language,接口描述语言。 [ object, uuid(D01D924原创 2013-05-21 16:45:46 · 1946 阅读 · 0 评论 -
COM的结构
一.COM的对象与接口COM(component object model)也即对象组件模型,他的杰出代表是OLE(object linking and embedding)对象链接和嵌入。COM主要有三种类型,组件,COM对象和接口,这三种的关系是组件可以包含多个COM对象,一个COM对象包含多个接口,先介绍下COM对象就是符合COM标准的对象,换句话说,就是继承IUnknown的对象,接口原创 2014-08-02 11:01:14 · 1094 阅读 · 0 评论 -
COM对象的创建原理
笔者学习COM原理有一段时间了,但是在创建COM对象时一直使用的是智能指针,别的方式在网上也见过好几次,但是不明白其原理,所以也只是看看,现在想系统的学一下COM原理,将原来大致浏览的内容重新看了一遍,又有了些新的收获,现在结合自己的理解,整理如下:创建COM对象主要有三个API函数分别是:一:CoGetClassObject(const CLSID& clsid,//COM对象的CL原创 2013-07-05 09:38:47 · 2275 阅读 · 2 评论 -
VC调用COM组件的几种方式
这个网上都有现成的,我就不说原创了,否则就太没脸了,但是经过笔者的测试,都成为可用的。尽可能的写成傻瓜式的教程,让大家都有些成就感的同时学到东西现在说明下环境WIN7+VS2010,我的com组件是Dic.dll,内含接口是IDicCtrl第一种是智能指针:#import "D:\project\Dic\Debug\Dic.dll" no_namespace//记得加入这一句//初转载 2013-07-04 21:24:30 · 3208 阅读 · 0 评论 -
UrlDownloadtoFile文件下载,进度条,下载暂停,停止的简单实现
对于从网络上下载文件,我们会用到UrlDownloadtoFile API函数,来实现下载,但是对于整个下载过程的监视,比如下载进度,已下载多少,还有下载暂停,下载到中途,不想下了,下载停止等功能的实现又该如何?这篇文章就是来解答这些问题的。其实对于下载过程的监视只消实现一个IBindStatusCallback接口就能实现,在OnProgress函数中就能通过计算获得当前的下载进度,这样原创 2013-07-18 16:47:43 · 2632 阅读 · 0 评论 -
将一个目录写入复合文件
我们知道,复合文件是文件系统的的文件系统,在结构化存储当中复合文件是不能避免的,目录就是相当于IStorage,文件呢则是IStream,在一个当前目录中,深入内部进行查找,如果是目录呢,则创建IStorage对象,对象名称是目录名称,如果是文件呢,则读取文件之后呢,将文件的内容读入到内存,然后写入流中void main(){::CoInitialize(NULL); wchar_t*原创 2013-07-13 18:04:24 · 814 阅读 · 0 评论 -
自定义实现IStream
// IStream.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#includeusing namespace std;class hInstance:public IStream{private: ULONG m_AddRef; char* m_buf;//缓冲区指针 ULONG m_cur_position;//原创 2013-07-12 16:23:10 · 1778 阅读 · 0 评论 -
COM组件:可连接对象的VC实现
我们之前使用的COM组件都是由客户端发起请求,而COM组件提供服务,这样的通信都是单向的,但是有时我们需要双向的通信,比如当一个已经提供服务的COM组件对象触发某个保留的事件时,在前一段时间我们并不知道该怎么做,而现在明确了,但是COM组件已经提供服务,我们对于该事件的处理只能在客户端实现,这时候可连接对象就有了它用武之地了。现在我们说说可连接对象是怎么实现的吧原创 2013-07-11 11:35:11 · 1253 阅读 · 0 评论 -
COM对象聚合的原生态实现(非向导)
之前我有一篇博客是介绍如何使用ATL向导生成对象聚合的,那时候实现的快感掩盖了我无知的现实,现在重新拿起COM原理与应用这本书,我想还是全手工自己手写一遍吧,于是就有了这篇博文,关于对象聚合,我想只是代码复用的一种,如果有两个接口ISome和IOther两个接口分别完成不同的功能,而那么对象聚合的含义就是在外部对象ISome中声明所有的接口,但是在非ISome的功能函数中调用的是接口IOt原创 2013-07-07 10:37:10 · 823 阅读 · 0 评论 -
MFC视图模式下添加WORD编辑框
对于OLE的WORD对话框嵌入网上有教程,但是为了自己的学习,也不惜与别人的重复了,这算是个总结吧环境:WIN7+VS2010+OFFICE20101.创建一个基于单视图的MFC程序名称为NO吧,只是注意一点,在创建时要注意设置成容器类型2.在类向导中添加类->类型库中的MFC类,根据文件选择,笔者的是C:\Program Files\Microsoft Office\Office14原创 2013-06-05 19:58:00 · 1587 阅读 · 1 评论 -
进程外组件指针的传递
我们知道进程都有自己的进程空间,都有自己的起始地址,因此在一个进程中的指针在另外一个进程中是无效的,一般在一个进程中的使用的地址类型的指针在进程之间传递时是不能使用的,经过笔者测试,如果我们传递接口指针则不会出现该问题,但要注意的是要自己实现该接口,比如IStream*现在举例如下://这是测试的代码STDMETHODIMP Csimple::test (IStream* psim){原创 2013-06-03 18:15:16 · 1518 阅读 · 0 评论 -
COM对象包容
说到对象包容不可不提的便是对象聚合,其用意都是代码的可重用性的一种方式,刚刚看完了对象包容,所以在这儿写下自己的理解,其适用场所是,当有对象A实现了someinterface接口的功能,对象B实现了otherinterface接口的功能,当需求改变时,要求,B实现一种新的功能,但是该功能在A中已经实现,所以此时要实现代码的可重用性,对象B的新功能调用对象A的功能函数,而不再自己重新实现,当原创 2013-05-27 19:51:04 · 801 阅读 · 0 评论 -
生成COM存根代理对象-进程透明性
不管是进程内组件还是进程外组件,客户程序可以使用一致的方法创建COM对象。对于进程内组件还是进程外组件,无论是创建过程,还是客户程序对接口的调用,我们都可以按照一般的同一进程内部函数调用的过程来理解,组件个客户之间的交互过程。但是实际情况是对于进程内组件函数的调用要比进程外组件函数的调用要复杂得多。 而存根代理对象则只是用于进程该组件,由于客户程序和对象在不同的进程空间内部,所以所原创 2013-05-29 20:01:07 · 1927 阅读 · 0 评论 -
COM进程外组件的实现vc++
说明进程外组件的实现有三个部分组成分别是:进程外组件:com_test->simple(接口)代理存根 :com_proxy客户端 :com_client开发环境:WIN7+VS2010(一) 创建进程外组件使用VS2010创建ATL项目,项目名称是com_test,点击确定之后需要注意的是选择可执行程序,而不是dll!,其他保持默认,之后类似进程内组件,添加一原创 2013-05-30 10:27:05 · 4302 阅读 · 1 评论 -
COM 对象聚合
无论是对象聚合或是对象包容,其作用都是组件的复用,使用环境是这样的,有组件some对象和other对象,我们暴露出来的是some对象,现在需求改变了,some要加入新的功能,而该功能已经被other组件对象实现,而且完全不需要修改,在这种情况下,使用对象聚合,即,首先获得Isome的接口,使用其功能,在Isome接口中使用QueryInterface函数,获得Iother接口,进而复用其功原创 2013-05-28 17:00:01 · 1243 阅读 · 0 评论 -
COM对象的线程模型
来源: http://blog.youkuaiyun.com/crybird/archive/2008/10/11/3057067.aspx查找了好多资料,终于对套件这一概念有一点心得,赶紧记录下来。首先,只要遵守COM规范,不用COM库也能编写COM程序,那相当于自己实现用到的COM库函数。本篇COM如果单独出现,指COM库。1 进程、线程回顾转载 2014-08-29 09:50:42 · 888 阅读 · 0 评论