COM 代理存根模式下COM组件的实现和加载
来源:互联网 发布:液体卫生巾 知乎 编辑:程序博客网 时间:2024/06/06 08:37
呵呵,多年没有搞COM相关的东西,这次由于公司项目的需要又重新学习了COM中与项目相关的部分技术,不过COM技术还是博大精深,敝人也是初探皮毛。本BLOG是对在代理/存根模式下COM组件调用的方法与兄弟们探讨一下。希望能对大家有所帮助。
COM组件对外输出接口有两种模式:TLB库((Type Library)模式和代理/存根(Proxy/stud)模式。如果COM组件是通过TLB库模式输出的时候,将会生成一个.tlb文件,这种方法客户端调用也方便(直接导入即可),同时支持跨语言开发和调用,所以是VC默认的COM接口输出模式。但是该模式将不支持部分IDL语言定义的接口属性,例如:size_is, length_is,[]ref等相关属性。关于tlb的说明请参考http://msdn.microsoft.com/en-us/library/aa366757(v=vs.85).aspx文档。代理/存根(Proxy/stud)模式相对就比较麻烦,并且不能支持跨语言开发和调用,但是可以很好的支持IDL语言定义的各种属性。下面我们主要说明一下代理/存根(Proxy/stud)模式的生产和组件调用。关于IDL接口的定义和说明请参考http://msdn.microsoft.com/en-us/library/aa367091(v=VS.85).aspx文档。
代理/存根(Proxy/stud)模式下COM组件或者服务的生成:由于VC编译器默认生成的是tlb库模式,所以首先需要通过/notlb编译选项告诉编译器我们不需要tlb库输出,同时需要在资源文件(.rc)中将导入tlb库的命令取消(TYPELIB "Interface.tlb")。如果为services服务,在执行前面步骤操作后需要编写一个.mk文件。该文件主要用来将idl接口文件生产的.h, _i.c, _p.c, dlldata.c编译生产代理/存根(Proxy/stud)需要的dll文件, 并通过nmake -f DataExchangeServer.mk 命令编译和生产dll文件,最后通过regsvr32命令将dll注册为服务。
客户端调用COM组件的流程:首先需要将idl接口生产的.h和_i.c include到客户端项目代码中。并通过下面代码实现COM组件的创建和连接(方法很多,下面只是其中的一种):
CoInitialize(NULL);
IUnknown *m_pUnKnown;
IInterface *pvoid
HRESULT hr;
hr = CoCreateInstance(cliid, NULL, CLSCTX_ALL, IID_IUnknown, (void **)&m_pUnknown);
hr = m_pUnknown->QueryInterface(iid, &pvoid);
CoUninitialize();
- COM 代理存根模式下COM组件的实现和加载
- COM 代理存根模式下COM组件的实现和加载
- COM代理与存根
- COM代理与存根
- 生成COM存根代理对象-进程透明性
- com之 代理(proxy)与存根(stub)
- com之 代理(proxy)与存根(stub)
- com之代理(proxy)与存根(stub) [转]
- 分布式 COM - 代理/存根及 IDL 接口定义语言
- com之代理(proxy)与存根(stub)
- 创建COM组件的实现(或者叫作注册Com组件)
- 手工加载未注册的 COM 组件
- 什么是com和com组件
- 在Linux下实现COM组件
- 在Linux下实现COM组件
- 什么是代理和存根
- 什么是代理和存根 ?
- 什么是代理和存根 ?
- 水平垂直投影
- 设计模式 - 装饰模式
- cocos2dx使用CocosBuilder(编辑器)完成基础骨骼动画
- 程序相关网站
- fabric简介
- COM 代理存根模式下COM组件的实现和加载
- http://zz563143188.iteye.com/blog/1847029
- HANA vs PureData vs Exadata
- 今天遇到一个字符串 length出来的长度不对的问题
- jQuery.extend 函数详解
- pthread_create用法
- socket通讯相关
- STC12系列单片机的空闲模式、休眠模式(又叫掉电模式、停机模式)
- PHP 获取指定月对应天数