COM/ATL
javaweb_research
热爱生活 为了梦想和责任去奋斗
展开
-
dll和com
com英文为Component Object Model(组件对象模型),是微软生产软件组件的标准。它是构造二进制兼容软件组件的规范,不管组件应用何种语言编写只要遵循com规范就可以相互直接通信。提出com规范主要是为了满足:1.程序的快速开发,可以将一个大型的工程分成若转载 2011-08-31 16:52:33 · 405 阅读 · 0 评论 -
DLL-基本概念
动态链接库基本概念 在 Windows中存在一种叫做DLL(Dynamic Linkable Library动态链接库)的文件。它可以提供一些应用程序可以导入的数据、函数和类。DLL文件平时驻留在磁盘中,只有当运行的应用程序确实要调用这些DLL模块的情况下,系统才会将它们装载转载 2011-08-26 14:00:52 · 449 阅读 · 0 评论 -
COM笔记-类厂
CoCreateInstance实际上并没有直接创建COM组件 ,而是创建了一个被称作是类厂的组件。而所需的组件正是由些类厂创建的。类厂组件的唯一功能就创建其他的组件。创建组件的标准接口是IClassFactory,用CoCreateInstnce创建的组件实际上是通过IClas转载 2011-08-26 11:16:22 · 1254 阅读 · 0 评论 -
COM笔记-CoCreateInstance
CoCreateInstance 创建组件的最简单的方法是使用CoCreateInstance函数。在COM库中包含一个用于创建组件的名为CoCreateInstance的函数。此函数需要一个CLSID参数,在此基础上创建相应组件的一个实例,并返回此组件的某个接口。转载 2011-08-26 11:22:09 · 844 阅读 · 0 评论 -
COM笔记-关于GUID
GUID 它实际上是组件和接口的标识号static const IID IID_IX = { 0x1ee235bd, 0x2e73, 0x49c2, 0xa5, 0x7c, 0x8b, 0xe5, 0x96, 0x92, 0x7e, 0xa2};实际上转载 2011-08-26 11:24:48 · 426 阅读 · 0 评论 -
COM笔记-关于HRESULT
HRESULTHRESULT(Here's the RESULT)值分成32位值, HRESULT值中16到30这15个比特位包含的是设备代码。设备代码标识的是可以返回HRESULT返回代码的操作系统部分。由于Windows操作系统是由Microsoft开发的转载 2011-08-26 11:25:28 · 351 阅读 · 0 评论 -
COM的引用计数规则
“COM本质论”一书对COM的引用计数规则精简为以下3个公理: (1)当一个非空的接口指针从一个内存位置被copy到另一个内存位置时,应该要调用AddRef,以便通知对象“又有附加的引用发生了”。 (2)对于已经包含非空接口指针的内存位置来说,在重写该内存位置转载 2011-08-26 11:28:27 · 309 阅读 · 0 评论 -
COM笔记-引用计数
com组件将维护一个称作是引用计数的数值。当客户从组件取得一个接口时,此引用计数值将增1。当客户使用完某个接口后,组件的引用计数值将减1.当引用计数值为0时,组件即可将自己从内存中删除。 为什么要选择为每一个接口单独维护一个引用计数而不是针对整个组件维护引用计数呢?转载 2011-08-26 11:29:01 · 769 阅读 · 0 评论 -
VS_2005_创建DLL工程,并进行调用与调试例子
VS 2005 创建DLL工程,并进行调用与调试例子1 例子目标在Window下,学会使用Visual Studio 2005创建简单的DLL工程,以及对DLL提供的接口进行调用与调试。2 DLL工程2.1 创建工程打开VS2005,并创建工程。如图所示。这里选择“Win32 控制台应用程序”即可。选择工程的位置,以及添加工程的名称“DllTest”,然后按“确定”。转载 2011-11-14 13:46:03 · 638 阅读 · 0 评论 -
怎样从一个DLL中导出一个C++类
原文来源:http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx译文来源:http://blog.csdn.net/clever101 C++语言毕竟能和Windows DLLs能够和平共处。 介绍 自从Windows的开始阶段动态链接库(DLL)就是Windows转载 2011-10-31 19:04:07 · 482 阅读 · 0 评论 -
动态链接库创建与使用(学习笔记) .
在学习过程中,一次次的感觉到dll文件的重要性,所以乘着这两天有时间,又把孙鑫老师的视频回顾了一遍,随便做了一下笔记,以供后续使用。IDE:Visual C++ 6.0创建动态链接库的方法方法一:(单个*.cpp文件)1. 新建dll工程2. 添加C/C++源文件(c++)3. 在源文件中,编写函数(每个函数结尾不需要‘;’)(如下图)转载 2011-11-11 16:59:46 · 425 阅读 · 0 评论 -
VC++动态库和静态库创建与使用
VC++动态库和静态库创建与使用 一:静态库的创建VC++6.0中new一个的为win32 static library工程,之后有二个选项。根据需求选吧。 具体的类或者函数的添加过程和标准的工程一样,直接创建新的类或者添加新 的.h(例:MY.h)和.CPP(例:MY.cpp)文件。然后在其中编写实现。 完成后编译会生成一个.lib文件(例如:生成的是MY.lib)。转载 2012-05-17 11:22:58 · 485 阅读 · 0 评论 -
VC动态库,静态库编译选项的使用
A) VC编译选项 多线程(/MT)多线程调试(/MTd)多线程 DLL (/MD)多线程调试 DLL (/MDd)B) C 运行时库 库文件Single thread(static link) ML转载 2012-05-17 11:25:35 · 645 阅读 · 0 评论 -
DLL-使用DLL
动态链接库的使用fangyukuan2010.6.21应用程序可以调用的DLL函数,在DLL中叫做导出函数,而在应用程序中叫做导入函数。应用程序中的导入函数与DLL文件中的导出函数进行链接有两种方式:隐式链接和显式链接。一、隐式链接在建立一个DLL文件时,编译转载 2011-08-26 13:59:57 · 380 阅读 · 0 评论 -
-在可执行文件或DLL的多个实例之间共享静态数据
全局数据和静态数据不能被同一个. exe或DLL文件的多个映像共享,这是个安全的默认设置。但是,在某些情况下,让一个. exe文件的多个映像共享一个变量的实例是非常有用和方便的.每个. exe或DLL文件的映像都由许多节组成。按照规定,每个标准节的名字均以圆点开头。转载 2011-08-26 13:49:35 · 498 阅读 · 0 评论 -
DLL-创建DLL
动态链接库的创建 编写DLL时的函数与一般的函数方法基本一样。但要对库中的函数进行必要的声明,以说明哪些函数是可以导出的,哪些函数是不可以导出的。把DLL中的函数声明为导出函数的方法有两种:一是使用关键字_declspec(dllexport)来声明。二是在.转载 2011-08-26 13:11:18 · 346 阅读 · 0 评论 -
用VC进行COM编程的初级教程
用VC编程所必需掌握的几个关键概念(这里所说的均是用C++语言条件下的COM编程方式):(1) COM组件实际上是一个C++类,而接口都是纯虚类。组件从接口派生而来。我们可以简单的用纯粹的C++的语法形式来描述COM是个什么东西: class IObject转载 2011-09-02 09:14:39 · 509 阅读 · 0 评论 -
COM笔记-包容与聚合
COM不支持实现继承的原因在于这种继承方式将使得一个对象的实现同另外一个对象的实现紧紧地关联起来。在这种情况下,当基类的实现被修改后,派生类将无法正常运行而必须被修改。这就是为什么一些用C++编写大型程序的专家们强烈建议人们基于抽象类来构建应用程序。因此,为了保证以组件的修改转载 2011-08-26 11:15:02 · 409 阅读 · 0 评论 -
COM笔记-COM库函数
COM在OLE32.DLL和 OLE32.LIB定义了一些常用的函数。在使用这些函数前要先调用CoInitialize来初始化COM库。当进程不再需要使用COM库函数时要调用CoUninitialize.原型:WINOLEAPI CoInitialize(__in转载 2011-08-26 11:23:15 · 388 阅读 · 0 评论 -
COM笔记-Widows 注册表
Widows 注册表 HKEY_CLASSES_ROOT在此关键字之下,可以看到有一个CLSID关键字。在CLSID关键字之下列有系统中安装的所有组件的CLSID。注册表CLSID是一个具有如下格式的串:00000010-0000-0010-8000-00AA006D2EA4转载 2011-08-26 11:23:53 · 658 阅读 · 0 评论 -
COM笔记-动态链接
在实现了IUnknown之后,组件和客户之间只是一种非常松散的连接,这使用组件和客户各自可以发生变化而不会对对方造成什么影响。下面讨论如何将组件放入到动态链接库(dll)中。关于DLL更多内容可以参考我的其它文章:DLL-基本概念DLL-创建DLLDL转载 2011-08-26 11:26:18 · 362 阅读 · 0 评论 -
COM笔记-QueryInterface函数
客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是IUnknown。它在UNKNWN.H头文件定义 :如下 Interface IUnknown { virtual H转载 2011-08-26 11:48:20 · 476 阅读 · 0 评论 -
COM笔记-接口
普通接口实例(vs2008)代码下载:http://www.box.net/shared/tlke8tb7j9#include using namespace std; #include // Define interface. /*转载 2011-08-26 11:49:12 · 411 阅读 · 0 评论 -
使用ATL设计组件(vs2008)
使用ATL设计组件(vs2008)Fangyukuan 2010-4-9 新建一个工程: 点击OK,其它都是Next一直到Finish. 工程建好后,可以看到如下类视图:转载 2011-08-26 11:50:08 · 374 阅读 · 0 评论 -
使用ATL设计组件(VC6.0)
使用ATL设计组件(VC6.0)fangyukuan2007年11月30日ATL(ActiveX Tempelate Library)使用基于模板的方法充分地对COM进行了支持。通过对ATL所提供的模板的继承,可以直接获得IUnknown、IDispatch、ICla转载 2011-08-26 11:53:25 · 521 阅读 · 0 评论 -
exe和dll
程序的所有代码和数据都存在于进程空间之中。程序是在进程空间内运行的。进程空间是应用程序运行的基本环境,没有进程空间就根本无法运行程序。在EXE文件中,程序的数据引用关系和过程调用关系是用相对地址表示的,当程序加载到进程空间中的绝对地址上时,操作系统需要将对相对地址的引用和调用关系调整为对绝对地址的引用和调用关系,这一过程称为“重定位”。需要重定位的地方称为重定位项,它是保存在EXE文件的表头转载 2012-06-06 09:45:43 · 427 阅读 · 0 评论