
COM技术内幕笔记
文章平均质量分 80
谛听-
线上幽灵
展开
-
COM---多线程
调整 将函数调用的参数从一个进程的地址空间传到另一个进程的地址空间。COM直接使用了Win32线程,但仍有细微差异。Win32线程:用户界面线程、工作线程 COM线程:套间线程(类似于用户界面线程)、自由线程(类似于工作线程)自由线程若某个组件是有自由线程创建的,则任意线程均可在任意时候调用它,COM不能使之同步,同步工作将由COM移至组件本身。COM不能同步对组件的调用,所以自由线程不需要消息原创 2017-02-19 23:59:35 · 1887 阅读 · 0 评论 -
COM---调度接口与自动化
自动化服务器:实现了IDispatch接口的COM组件。自动化控制程序:通过IDispatch接口同自动化服务器进行通信的COM客户。IDispatch通过COM接口提供的任何服务都可以通过IDispatch接口提供。有了IDispatch,COM可通过一个标准的接口提供它所支持的服务,而无需提供多个特定于服务的接口。IDispatch将接受一个函数名,并执行它。IDispatch定义 可以在编译原创 2017-02-19 14:55:08 · 3368 阅读 · 0 评论 -
COM---EXE中的服务器
调整:将函数调用的参数从一个进程的地址空间传到另一个进程的地址空间。代理:同另外一个组件行为相同的组件,必须是DLL形式的,因为需要访问客户进程的地址空间以便对接口数据进行调整。残根:对客户传过来的数据进行反调整。IDL(接口定义语言)定义IX接口//// Server.idl - IDL source for Server.dll//// The MIDL compiler genera原创 2017-02-18 17:28:21 · 2703 阅读 · 0 评论 -
COM---编程工作的简化
智能指针将引用计数隐藏起来,简化客户端。 CUnkown和CFactory通过提供可服用的IUnkown和ICfactory,简化服务器端,即COM的编写。简化客户端智能接口指针智能指针的好处在于无需记住去调用Release智能指针是重载了->操作符的类,智能指针接口类包含指向另一个对象的指针。此外,为使客户相信智能指针和指针是相同的,智能指针还需要重载其他操作符,如*、&。//// Ptr.h原创 2017-02-17 13:54:11 · 664 阅读 · 0 评论 -
COM---组件复用:包容与聚合
包容和 聚合为实现组件复用和定制提供了一种极鲁棒性的机制。使得COM框架下不需要实现继承,客户通组件的实现完全隔离开。 如果希望给组件增加新的接口,可以使用聚合。聚合是包容的一个特例。以下代码只列出了关键部分,其它部分省略。包容外部组件包含指向内部组件接口的指针,此时外部组件只是内部组件的一个客户。外部组件可通过将调用转发给内部组件来重新实现内部组件的某个接口,还可在内部组件代码前后加上一些代码对原创 2017-02-16 19:05:12 · 1588 阅读 · 0 评论 -
COM---类厂
客户调用CoCreateInstance,而CoCreateInstance调用CoGetClassObejct,CoGetClassObejct的作用是调用LoadLibrary寻找指定的COM组件(dll),然后使用GetProcAddress寻找组件的入口函数,其中DllGetClassObject被调用,这几步不可见,因为微软已经封装好了。 问题:CoGetClassObejct要加载dl原创 2017-02-15 18:31:24 · 698 阅读 · 0 评论 -
COM---注册表
//// Category.cpp -// 组件类演示程序//// 不编译为 UNICODE.#include <stdlib.h>#include <iostream.h>#include <assert.h>#include <comcat.h>///////////////////////////////////////////////////// 函数声明//// 工原创 2017-02-14 20:54:15 · 1135 阅读 · 0 评论 -
COM---动态链接
定义接口//// Iface.h//// 接口,所有COM接口都必须实现 IUnkown 接口interface IX : IUnknown{ virtual void __stdcall Fx() = 0 ;} ;interface IY : IUnknown{ virtual void __stdcall Fy() = 0 ;} ;interface IZ : IU原创 2017-02-14 18:29:08 · 624 阅读 · 0 评论