var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2008年09月15日

    COM编程(1)

    分类:

    Windows进程地址空间

    1.     Windows 95/98中,只有底部的2GB(0~0x7FFFFFFFx86平台)地址空间是真正对应用程序私有,而其中最底部的4MB是禁止访问的;上面的2GB空间由所有进程共享,对所有进程都一样。栈、堆和可读写的全局内存,以及应用程序的EXEDLL文件都被映射到底部的2GB地址上。

    2.     Windows NT/2000/XP/Vista中,进程也只能访问底部的2GB(x86平台),并且这部分空间最低和最高的64KB都不能被访问,最低64KB作为NULL指针指派以帮助程序员发现NULL指针错误,最高64KB作为64KB禁止进入以保护内核空间。

     

    组件对象模型(COM)是微软ActiveX技术的基础,COM组件以Win32动态链接库(DLLs)或可执行文件(EXEs)的可执行代码组成,于是COM组件是动态链接的。可以把ActiveX看作“老”的OLE为了与Internet协同工作而经修改之后所建立起来的事物,所以,ActiveX不仅包括了建立在COM上的Windows特性,而且还包括IIS族和WinInet编程接口。OLE立足于对象链接和嵌入(Object Linking and Embedding),它是ActiveX技术的另一个子集,其中包含了一些零碎的东西,如拖放。

     

    COM是一种软件结构,它为软件的动态组成提供了许多基础设施。COMWindows提供了统一、可扩充和面向对象的通信协议,它支持以下特性:

    l  Win32客户EXE载入和调用Win32 DLL提供了一种标准的与语言无关的方法

    l  为一个EXE控制同一机器上的另一个EXE提供了通用的方法(可替代动态数据交换(DDE))

    l  ActiveX控件代替了16Visual Basic自定义控件(VBX)

    l  为应用程序与操作系统的交互操作提供了一种新的功能强大的方法

    l  为适应新的协议提供了可扩展性,如MicrosoftOLE DB数据库接口

    l  分布式COM(DCOM)允许一个EXE与不同机器上的另一个EXE进行通信,即使两台机器使用了不同系列的微处理器

     

    COM是一项功能强大的集成技术,是在OLE发展过程中产生的,它允许你在运行时将各种异构软件部分混合起来,它使得开发人员可以编写出能够混合起来运行的软件,而不用担心诸如线程特性以及所用开发语言等问题。OLE 1的底层是DDEOLE 2中采用新的COM模型作为底层。COM协议将一个软件模块同另一个软件模块连接起来,然后其自身不再参与两者之间的通信过程。当这种连接建立起来之后,两个模块之间就可以通过“接口”的机制来通信。这些接口既不需要静态或动态的链接入口点,也不需要硬编码地址,而且不同于那些用于启动通信过程的一般COM函数。

     

    分享到:

    历史上的今天:

    华为工作实情 2012年09月15日