COM
iot-genius
If I Rest, I Rust!!
展开
-
COM组件设计与应用(一)——起源及复合文件
本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8883.html一、前言 公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:“小杨呀,以后写程序就和搭积木一样啦。你赶快学习一些OLE的技术吧......”,当时我心里就寻思 :“开什么玩笑?搭积木方式写程序?再过100年吧......”,但作为一名听话的好学原创 2012-10-12 11:01:32 · 4503 阅读 · 0 评论 -
Inside COM读书笔记-----ExE中的服务器
1. 不同的进程每一个EXE文件都将在不同的进程中运行,而每一个进程都有其自己的进程空间。一个进程空间中的逻辑地址0X0000ABBA所对应的物理地址将不同于另外一个进程中同一逻辑地址所对应的物理地址。所以若一个进程将地址0X0000ABBA传给另一个进程,后者访问到的逻辑单元将不是前一个进程所希望的。同每一个EXE都有自己的进程不同,DLL将映射到链接他们的EXE文件的进程原创 2013-05-22 21:09:39 · 2705 阅读 · 0 评论 -
Inside COM读书笔记-----包容和聚合
1. 包容和聚合包容和聚合实际上是使一个组件使用另一个组件的一种技术。包容简介 外部组件包含指向内部组件接口的指针,外部组件只是内部组件的一个客户。外部组件也可以通过将调用转发给内部组件的方法重新实现内部组件所支持的某个接口,并且外部组件还可以在内部组件代码的前面加上一些代码以对接口进行改造。 聚合简介 聚合是包容的一个原创 2013-05-22 20:57:55 · 2912 阅读 · 0 评论 -
用IDataObject访问剪切板
一个简单的通过OLE来访问粘贴板的例子: WINOLEAPI OleGetClipboard(IDataObject ** ppDataObj); 这个简单的Windows API调用用来返回一个IDataObject,它提供用来一个干净地访问WINDOWS粘贴板内容的好接口。注意,我们在本例中不需要实现IDataObject 接口,我们仅仅需要知道接口怎么样工作的,一个简单的访问粘贴板内原创 2013-05-04 09:48:47 · 5167 阅读 · 1 评论 -
COM特性 包容和聚合
包容:假定我们已经实现了一个COM对象,不妨称它为对象A,它实现了接口ISomeInterface,之后,考虑到新的需要,我们要实现一个新的COM对象,称它为B,它既要实现接口ISomeInterface,也要实现接口IOtherInterface,而且,ISomeInterface接口所提供的服务与对象A所提供的服务基本一致,于是,我们考虑在实现对象B的过程中重用对象A的功能,只需要原创 2012-12-17 12:39:28 · 1267 阅读 · 0 评论 -
一个完整的COM 示例Demo(C++语言描述)
对于初学com的,一个完整的示例还是挺麻烦的,最近笔者也在学习,通过自己的摸索了解了下基本原理。在此将一个简单string的示例一步一步的详解。 源代码下载1.创建工程首先使用vs2010(笔者使用的vs2010就拿此来讲)创建一个工程。选择空项目,笔者命名为MyCom。2.创建接口类#ifndef IString_h__#defi原创 2012-12-11 20:20:50 · 7979 阅读 · 3 评论 -
用标准C编写COM(八)COM in plain C,Part8
原文:http://www.codeproject.com/Articles/17038/COM-in-plain-C-part-8下载例程-419Kb内容简介脚本代码持久化脚本代码和“命名项”调用脚本中的特定函数查询/设置脚本中变量的值查询/设置脚本中变量的值简介在前面的章节中,我们学会了如何创建Activex脚本宿主。虽然这些章节覆盖了编写一个脚本宿主的原创 2012-12-10 09:28:40 · 5624 阅读 · 0 评论 -
用VC进行COM编程所必须掌握的理论知识
转自:http://www.yesky.com/20020715/1620482_1.shtml(作为一个初学者,觉得本文挺好,推荐给大家)这篇文章是给初学者看的,尽量写得比较通俗易懂,并且尽量避免编程细节。完全是根据我自己的学习体会写的,其中若有技术上的错误之处,请大家多多指正。 一、为什么要用COM 软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到现在原创 2012-12-09 11:47:39 · 4087 阅读 · 3 评论 -
CoCreateInstance具体内部实现
CoCreateInstance(....) { //....... IClassFactory *pClassFactory=NULL; CoGetClassObject(CLSID_Object, CLSCTX_INPROC_SERVER, NULL, IID_IClassFactory, (void **)&pClassFactory); p原创 2012-11-22 09:11:35 · 7567 阅读 · 2 评论 -
Inside COM读书笔记-----调度接口与自动化
1. 一种新的通信方式IDispatch为客户和组件提供了另外一种通信方式,有了IDispatch后,COM组件可以通过一个标准的接口提供它所支持的服务,而无需提供多个特定与服务的接口。 1.1旧的通信方式客户和组件之间的通信是通过接口完成的,接口拥有一个有函数指针构成的数组。客户代码需要包含一个以抽象基类形式描述接口的头文件。编译器将读取此头文件,然后为抽象基类原创 2013-05-22 21:15:19 · 4582 阅读 · 2 评论 -
Inside COM读书笔记-----多线程
1. COM线程模型COM并没有定义新的线程和进程模型,而是直接使用Win32线程。1.1Win32线程 典型的Win32线程具有两种不同类型的线程:用户界面线程和工作线程。用户线程是同一个或多个窗口关联着的。这些线程具有自己的消息循环,工作线程用于后台处理。一个进程可以具有多个用户界面线程和多个工作线程。 每一个用原创 2013-05-22 21:24:04 · 2614 阅读 · 0 评论 -
使用COM简单操作IE
主要使用IWebBrowser接口。具体可参考如下博文:http://blog.csdn.net/shanhe/article/details/397373代码如下:#include #include #include #include using namespace std;int main(){ HRESULT hr; IWebBrowser2 *pWebBrowse原创 2013-06-10 13:01:56 · 5836 阅读 · 1 评论 -
COM的“可重用性”特性包括两种模型:包容和聚合
包容和聚合是COM的两种重用模型,它们的思路基本一致,只是在实现方法上有所不同,下面简要总结一下实现方法:1.包容: 假定我们已经实现了一个COM对象,不妨称它为对象A,它实现了接口ISomeIntf,不久之后,考虑到新的需要,我们要实现一个新的COM对象,称它为B,它既要实现接口ISomeIntf,也要实现接口IOtherIntf,而且,ISomeIntf接口所提供的服务与对象A所原创 2013-05-28 23:03:14 · 3808 阅读 · 1 评论 -
Inside COM读书笔记-----类厂
1.CoCreateInstance 通过传人参数CLSID创建相应组件的一个实例,并返回此组件实例的某个接口。 CoCreateInstance的声明 HRESULT __stdcall CoCreateInstance( __in REFCLSID rclsid, __in_opt LPUNKNOWN pUnk原创 2013-05-14 18:38:27 · 2814 阅读 · 0 评论 -
Inside COM读书笔记-----关于HRESULT、GUID、注册表及其它细节
1. HRESULTHRESULT是一个可以分成三个域的32位值,注意:S_FALSE被定义为1而S_OK被定义为0,这一点同C/C++变成原则正好相反。HRESULT值中16到30这15个比特位包含的时设备代码,设备代码标识的时可以返回HRESULT中返回代码的操作系统部分。当前定义的:HRESULT值的使用成功的代码有多原创 2013-05-13 21:00:17 · 2760 阅读 · 0 评论 -
Inside COM读书笔记------引用计数
1. 生命期控制当使用完一个接口而仍要使用另外一个接口时,是不能将此组件释放掉的。很难知道两个指针是否指向同一个对象。IUnknown的另外两个函数AddRef和Release来指示合适处理完一个接口的手段。2. 引用计数简介AddRef和Release实现的时一种名为引用计数的内存管理技术。引用计数是使组件能够自己将自己删除的最简单同时也是原创 2013-05-13 20:53:41 · 2237 阅读 · 0 评论 -
Inside COM读书笔记------QueryInterface接口
1. 接口查询关于IUnknown所有的com接口都继承了IUnknown,每个接口的前三个函数是QueryInterface、AddRef、Release。这使得所有的接口都可以当成IUnknown来使用。因此组件的任何一个接口都可以被客户用来获取他所支持的其他接口。IUnknown指针的获取可以通过一个CreateInstance函原创 2013-05-13 20:49:57 · 2579 阅读 · 0 评论 -
Inside COM读书笔记------动态链接库
1. 组件的创建在客户获取某个组件接口指针之前,必须先将相应的DLL装载到起进程空间中并创建此组件。从DLL中输出函数先将需要输出的函数用extern “C”进行标记,如:extern "C" IUnknown * CreateInstance(){ IUnknown*pI = (IUnknown*)(void*)new CA;原创 2013-05-13 20:56:48 · 2665 阅读 · 0 评论 -
Inside COM读书笔记------接口
1.接口的作用组件可以充应用程序中删除并可用另外一个组件代替,只要新的组件支持同样的接口。单个组件并不能起决定性作用,相反,用以连接组件的接口对应用程序亲戚到决定性作用。使用组件来构成应用程序最大优点在于可以复用应用程序的结构。接口可以保护系统免受外界变化的影响、接口可以使得客户用相同的方式处理不同的组件。2.COM接口的实现class IX原创 2013-05-09 19:01:38 · 1952 阅读 · 0 评论 -
用标准C编写COM(七)COM in plain C,Part7
原文:http://www.codeproject.com/Articles/15037/COM-in-plain-C-Part-7拥有自定义COM对象的ActiveX脚本宿主允许在你的应用程序中调用C函数。 下载例程- 380 Kb内容 简介 声明自定义对象 我们的IDL文件和类型库 向引擎注册我们的COM对象 脚本如何调用我们COM对象的函原创 2012-11-25 20:31:48 · 4607 阅读 · 0 评论 -
COM库常用的函数
COM库常用的函数一. 初始化函数1.CoBuildVersion:获取COM库的版本号2.CoInitialize:初始化COM库3.CoUnInitialize:终止CO服务4.CoFreeUnsedLibraries:释放进程中所有不在使用的组件程序二.GUID函数1.IsEqualGUID:判断两个GUID是否相等2.原创 2012-11-03 07:43:09 · 4622 阅读 · 4 评论 -
【转】VC中BSTR、Char和CString类型的转换(太牛了)
1、char*转换成CString若将char*转换成CString,除了直接赋值外,还可使用CString::format进行。例如:char chArray[] = "This is a test";char * p = "This is a test";或LPSTR p = "This is a test"; 或在已定义Unicode应的用程序中TCHAR * p = _T原创 2012-10-26 11:44:39 · 15508 阅读 · 1 评论 -
HRESULT 解密
百度百科中的定义 函数返回值。如果这个函数是执行完返回的话将包含具有实际意义的数据,如果立即返回则包含状态信息--发送成功与否,并不能说明执行的如何。 HRESULT A value returned from a function call to an interface, consisting of a severity code,原创 2012-11-04 15:13:04 · 3322 阅读 · 1 评论 -
用标准C编写COM(四)COM in plain C,Part4
原文:http://www.codeproject.com/Articles/14117/COM-in-plain-C-Part-4用C构造多接口的COM对象下载例程-194kb内容 在我们的对象中嵌入子对象 应用程序获取基对象的方法 应用程序通过基对象获取子对象的方法 应用程序从一个子对象获取另一个子对象的方法 应用程序获得我们集合对象的方法原创 2012-11-03 17:19:47 · 8117 阅读 · 4 评论 -
windows shell 创建快捷方式和读取快捷方式的代码
不说了 直接贴代码:#include #include #include #pragma comment(lib, "comsuppw.lib") struct SHORTCUTSTRUCT{ LPTSTR pszTarget; LPTSTR pszDesc; WORD wHotKey; LPTSTR pszIconPath; WORD wIconIndex;};typ原创 2012-11-02 19:25:05 · 4299 阅读 · 0 评论 -
VC中COM调用的方法
最近刚开始学习COM编程,里面诸多的知识让我有点吃不消,将学习的点滴进行记录,跟大家分享。对于com的调用一直没怎么搞明白,今天通过查资料将其进行整理。(这里为了方便,dll的开发主要参考杨老师的这篇COM 组件设计与应用(五)——用 ATL 写第一个组件)。 COM的调用方法主要有一下几种:准备工作DLL函数调用COM组件功能调用 一、准备工作1.创原创 2012-10-18 15:36:30 · 2046 阅读 · 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)请阅读下回内容;(当然读读本文内容也不错)这第一个组件,除了所有 CO原创 2012-10-18 14:15:36 · 2700 阅读 · 0 评论 -
COM 组件设计与应用(四)——简单调用组件
本文摘自:http://www.vckbase.net/index.php/wv/1211一、前言 同志们、朋友们、各位领导,大家好。 VCKBASE 不得了, 网友众多文章好。 组件设计怎么学? 知识库里闷头找! 摘自---杨老师打油集录原创 2012-10-15 15:45:08 · 3942 阅读 · 1 评论 -
COM 组件设计与应用(三)——数据类型
本文摘自:http://www.vckbase.com/index.php/wv/1206一、前言上回书介绍了GUID、CLSID、IID和接口的概念。本回的重点是介绍 COM 中的数据类型。咋还不介绍组件程序的设计步骤呀?咳......别着急,别着急!孔子曰:“饭要一口一口地吃”;老子语:“心急吃不了热豆腐”,孙子云:“走一步看一步吧” ...... 先掌握必要的知识,将来写起程序来原创 2012-10-15 09:09:26 · 3446 阅读 · 0 评论 -
用标准C编写COM(一)COM in plain C,Part1
原文:http://www.codeproject.com/Articles/13601/COM-in-plain-C 如何在不使用MFC、ATL、WTL或其他框架下使用标准C来创建和使用COM组件 下载例程-17.6kb内容: 简介 COM 对象和虚表 GUID QueryInterface(), AddRef(),原创 2012-10-20 11:19:39 · 13316 阅读 · 9 评论 -
COM 组件设计与应用(七)——编译、注册、调用
本文摘自:http://www.vckbase.net/index.php/wv/1218一、前言上两回中,咱们用 ATL 写了第一个 COM 组件程序,这回中,主要介绍编译、册和调用方法。示例程序你已经下载了吗?如果还没有下载,vc6.0 的用户点,vc.net 的用户点这里。二、关于编译2-1 最小依赖“最小依赖”,表示编译器会把 A原创 2012-11-07 16:25:57 · 2679 阅读 · 0 评论 -
COM编程入门不得不看的文章 :第一部分 什么是COM,如何使用COM
原文:http://www.codeproject.com/Articles/633/Introduction-to-COM-What-It-Is-and-How-to-Use-It 本文的目的是为刚刚接触COM的程序员提供编程指南,并帮助他们理解COM的基本概念。内容包括COM规范简介,重要的COM术语以及如何重用现有的COM组件。本文不包括如何编写自己的COM对象和接口。原创 2012-09-27 20:28:13 · 48071 阅读 · 7 评论 -
用标准C编写COM(六)COM in plain C,Part6
原文:http://www.codeproject.com/Articles/14905/COM-in-plain-C-Part-6如何用C编写ActiveX Script Host。下载例程-305Kb内容 简介 选择、打开引擎 我们的IActiveScriptSite对象 VBScript例程 初始化引擎 向引擎添加脚本 运原创 2012-11-17 10:36:26 · 4869 阅读 · 1 评论 -
COM编程入门不得不看的文章 :第二部分 深入COM服务器
原文:http://www.codeproject.com/Articles/901/Introduction-to-COM-Part-II-Behind-the-Scenes-of-a 本文为刚刚接触COM的程序员提供编程指南,解释COM服务器内幕以及如何用C++编写自己的接口(前一篇博文主要是COM编程的入门:COM编程入门不得不看的文章 :第一部分 什么是COM,如何使原创 2012-10-15 12:49:32 · 18524 阅读 · 15 评论 -
用标准C编写COM(五)COM in plain C,Part5
原文:http://www.codeproject.com/Articles/14183/COM-in-plain-C-Part-5添加连接对象(源、接收器)下载例程-246Kb内容 简介 在COM对象中封装回调函数 IConnectionPointContainer和IConnectionPoint对象 C应用程序例程 添加脚本语言支持原创 2012-11-09 17:55:05 · 5351 阅读 · 2 评论 -
用标准C编写COM(二)COM in plain C,Part2
原文:http://www.codeproject.com/Articles/13862/COM-in-plain-C-Part-2如何用C编写可以被Vbscript、VB和jscipt等脚本语言调用的COM组件 下载例程-93.5kb内容: 简介 为何脚本语言不能使用我们的DLL? 自动化数据类型(也就是BSTR、VARIANT) IDispat原创 2012-10-24 10:02:02 · 10178 阅读 · 5 评论 -
vc动态遍历word中的书签名(使用自动化接口)
首先定义几个函数,主要用于动态获取接口属性和方法:STDMETHODIMP CTestntkoView::GetProperty(LPDISPATCH pDisp, LPOLESTR pszName, VARIANT* pvResult){ if (NULL == pDisp) return E_POINTER; DISPID dwDispID; DISPPARAMS dis原创 2012-11-08 10:14:11 · 4191 阅读 · 0 评论 -
用标准C编写COM(三)COM in plain C,Part3
原文:http://www.codeproject.com/Articles/14037/COM-in-plain-C-Part-3用C编写COM集合 下载例程-174kb内容 简介 定义集合对象 辅助函数 我们集合对象的函数 应用程序获得我们集合对象的方法 VBScript例程 C例程 IEnumVARIANT对象 另原创 2012-10-29 12:29:55 · 6216 阅读 · 8 评论 -
COM 组件设计与应用(八)——实现多接口
本文摘自:http://www.vckbase.net/index.php/wv/1219一、前言 从第五回开始到第七回,咱们用 ATL 写了一个简单的 COM 组件,之所以说简单,是因为在组件中,只实现了一个自定义(custom)的接口 IFun。当然如果想偷懒的话,我们可以把 200 个函数都加到这一个接口中, 果真如此的话,恐怕就没有人喜欢使用我们这个组件原创 2012-11-07 17:09:45 · 3708 阅读 · 0 评论 -
COM组件设计与应用(二)——GUID和接口
本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8884.html原创 2012-10-12 11:02:41 · 3433 阅读 · 6 评论