当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 一、COM是一个更好的C++1、COM 是什么Don Box 说"COM IS LOVE"。
 

 

 ·字符串黑箱的背后    »显示摘要«
    摘要:   去年的时候,由于某种原因,我需要将一个文件的二进制形式以文本的格式输出到一个文本文件中,类似下面这个样子:4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 ......
 ·函数调用的底层机制    »显示摘要«
    摘要: body {font-family: verdana;font-size: 10.8pt; color:#000000; background-color:#ffffff} table {font-family: verdana;font-size: 10.8pt;text-decoration:none} table.frame {font-family: verdana;font-s......


COM技术初探(一)

 

一.com是一个更好的c++ 【程序编程相关:显示SOCKET错误信息

  【推荐阅读:VC++实现拨号上网程序详解

don box 说"com is love".com 的全称是 component object model 组件对象模型. 【扩展信息:『21天精通C++』第三周学习笔记(3-

1.com 是什么

2.从 c++ 到 dll 再到 com

2.1 c++

如某一软件厂商发布一个类库(cmath四则运算),此时类库的可执行代码将成为客户应用中不可分割的一部分.假设此类库的所产生的机器码在目标可执行文件中占有4mb的空间.当三个应用程序都使用cmath库时,那么每个可执行文件都包含4mb的类库代码(见图1.1).当三个应用程序共同运行时,他们将会占用12mb的虚拟内存.问题还远不于此.一旦类库厂商发现cmath类库有一个缺陷后,发布一个新的类库,此时需要要求所有运用此类库的应用程序.此外别无他法了.

图1.1 cmath 的三个客户

2.2 dll

解决上面问题的一个技术是将cmath类做成动态链接库(dll ,dynamic link library)的形式封装起来 .

在使用这项技术的时候,cmath的所有方法都将被加到 cmath dll 的引出表(export list)中,而且链接器将会产生一个引入库(import library).这个库暴露了cmath的方法成员的符号 .当客户链接引入库时,有一些存根会被引入到可执行文件中,它在运行时通知装载器动态装载 cmath dll.

当 cmath 位于dll中时,他的运行模型见图1.2

图1.2 cmath引入库

2.3 com

"简单地把c++类定义从dll中引出来"这种方案并不能提供合理的二进制组件结构.因为c++类那既是接口也是实现.这里需要把接口从实现中分离出来才能提供二进制组件结构.此时需要有二个c++类,一个作为接口类另一个作为实现类.让我们开始com之旅吧.

二.com基础

1. com基本知识

1.1 返回值hresult

com要求所有的方法都会返回一个hresult类型的错误号.hresult 其实就一个类型定义:


...   下一页
    摘要: 具有reset功能的多线程同步队列 前一段时间写了一个多线程同步队列,并且加入了reset功能。可以保证线程读到的不会是不可识别的数据。自己自测过,不过还是不能保证没有bug:) // -------------------------头文件:threadsafequeue.h---------------------------// #include <wtypes.h......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE