IDL 精髓
[绝版]基本信息
- 原书名: Essential IDL
- 原出版社: Addison Wesley Longman, Inc.
编辑推荐
本书向读者提代了IDL的详细描述及如何使用IDL方面的知识,基于示例、由浅入深地阐述了各种IDL构造,并提供了示例C++和VB代码。
本书分为两大部分,共10章。第一部分包括前6章,这部分完整地描述了IDL中的各种构造。同时还给出了随同客户调用序列以及方法实现。第二部分的4个章节则提示供了一个IDL,类型、修饰符、关键字及属性的参考。
内容简介回到顶部↑
目录回到顶部↑
序
前言
第1章 idl你好
1.1 什么是idl?
1.2 定义接口
1.3 添加参数
1.4 有关方向属性的更多问题
1.5 小结
第2章 一个idl文件的结构
2.1 接口和类型信息
2.2 库块内定义
2.3 编制类型库版本
2.4 生成c++类型信息
2.5 在库块外部定义
2.6 建立一个代理-存根dll
2.7 接口定义、类型库和oleautomation属性
2.8 本地属性
2.9 引入其他文件
2.10 在库信息组中引入文件
2.11 coclass
前言
第1章 idl你好
1.1 什么是idl?
1.2 定义接口
1.3 添加参数
1.4 有关方向属性的更多问题
1.5 小结
第2章 一个idl文件的结构
2.1 接口和类型信息
2.2 库块内定义
2.3 编制类型库版本
2.4 生成c++类型信息
2.5 在库块外部定义
2.6 建立一个代理-存根dll
2.7 接口定义、类型库和oleautomation属性
2.8 本地属性
2.9 引入其他文件
2.10 在库信息组中引入文件
2.11 coclass
前言回到顶部↑
所有以组件对象模型(Component Object Model,COM)为工作对象的开发者都需要有关COM接口定义语言(Interface Definition Language,IDL)的知识。IDL是一门相当复杂而又神秘的语言,所以获得有关知识也是一个颇为艰难的过程。本书就提供了IDL的详细描述以及如何使用IDL,使它变得易于接受和理解。本书采用基于示例、由浅入深的阐述方式,展现了各种各样的IDL构造(construct),叙述了它们存在的原因,具体是用来做什么的,在接口设计中怎样使用它们以及什么时候使用它们。而且,还提供了每一种情况下的IDL示例,若该示例是可应用的,还提供了C++和Visual Basic编写的客户端和COM对象的源代码。但是,这些源代码示例并非用于剪切下来并粘贴到已存在的应用程序中去,因为它们仅仅是被用来示例说明IDL的一些特殊点,以及它们与客户端和COM对象的实现间基本关系。
这本书是有关COM IDL方面知识的书籍,所以本书并没有涉及到IDL关键字、属性或者仅来自于标准远程过程调用(RPC)的有用的一些构造(construct)。此外,IDL最重要的部分是它由COM截取层(interception layer)高效地执行数据列集,本书的绝大多数讨论都是基于那些影响截取层性能的IDL构造的。那些对截取层没有影响的属性在绝大部分章节中被忽略。
这本书描述了大量的探索工作以及IDL提供的各种各样的功能的测试。某些情况下,可能会与正式文献的一些信息有分歧。作者鼓励读者亲自就这些论断做一些测试来确认其正确性。作者所做的所有测试都是使用微软IDL(MIDL)5.03.0280版本的编译器实现的。早期的版本可能不支持本书中一些详细讨论的特性。
新版本的MIDL编译器即将出现,IDL自身也将演化发展。总有一天,每个新版本都有新的IDL的现象会彻底消失,但是开发者们依旧需要处理IDL允许他们描述的事情。考虑到它的通用性和适应性,可扩展标志语言(eXtensibl Markup Language, XML)似乎是作为一门描述性语言的基础的很好选择。为了在将来的IDL领域中取得领先地位,作者鼓励读者阅读有关XML计划的W3C工作草案以及描述简单对象访问协议
(Simple Object Access Protocol)的W3C注释:
http://www.w3.org/TR/xmlschema-0
http://www.w3.org/TR/xmlschema-1
http://www.w3.org/TR/xmlschema-2
http://www.w3.org/TR/soap.html
作者欢迎反馈,任何问题、评论和纠正都可以通过e-mail发送到marting@develop.com。本书还有一个站点:http://www.develop.com/marting/essentialidl,该站点是由作者维护的站点中有一个勘误表以及一些示例。
本书适用的读者群
这本书面向的读者群是使用COM、微软事务服务器(MTS)、 C++或者Visual Basic的COM十的开发者以及接口设计人员。它假定读者已经具备了一些有关COM的工作知识,例如,Don Box编写的《Essential COM》中提到的知识或者Ted Pattison编写的《Programming Distributed Applications with COM+ and Microsoft Visual Basic 6.0》中提到的知识。
本书期望达到的目标
这本书被分成了两大部分。第一部分包括前六章,这部分用带有主语、谓语以及形容词的完整的明确的句式描述了IDL中的各种构造。在给出IDL构造的同时,还给出了随同客户调用序列以及方法实现。除第一章外,每一章都有一个小结,小结中列出了有关被讨论的IDL构造的使用方面的一些指导性建议。最后四个章节提供了一个IDL类型、修饰符、关键字以及属性的参考表。
第1章:IDL你好
许多COM开发者或者没有意识到IDL的存在,或者不能确定IDL存在的必要性。那么,第1章就描述了IDL的基础以及它存在的理由,还顺带提供了有关接口定义的一些基础知识。
第2章:一个IDL文件的结构
MIDL编译器能够输出两种格式的类型信息。具体哪一种类型信息出现的频率高取决于一个给定的IDL构造在这个IDL文件中所处的位置。第2章涉及到生成类型信息的细节问题,如何创建代理--存根(proxy-stub)DLL的问题,如何创建本地和远程接口的问题以及如何创建各种文件管理构造的问题。
第3章:数据类型和接口问题
使用适当的数据类型是接口设计以及组件集成的关键问题。第3章涉及到处理基本数据类型的细节问题以及对象引用、用户定义的数据类型、枚举、结构以及联合等知识。本章还涉及到如何确保在任意生成的类型库中出现信息的正确性。这一章还讨论了接口继承性的问题。
这本书是有关COM IDL方面知识的书籍,所以本书并没有涉及到IDL关键字、属性或者仅来自于标准远程过程调用(RPC)的有用的一些构造(construct)。此外,IDL最重要的部分是它由COM截取层(interception layer)高效地执行数据列集,本书的绝大多数讨论都是基于那些影响截取层性能的IDL构造的。那些对截取层没有影响的属性在绝大部分章节中被忽略。
这本书描述了大量的探索工作以及IDL提供的各种各样的功能的测试。某些情况下,可能会与正式文献的一些信息有分歧。作者鼓励读者亲自就这些论断做一些测试来确认其正确性。作者所做的所有测试都是使用微软IDL(MIDL)5.03.0280版本的编译器实现的。早期的版本可能不支持本书中一些详细讨论的特性。
新版本的MIDL编译器即将出现,IDL自身也将演化发展。总有一天,每个新版本都有新的IDL的现象会彻底消失,但是开发者们依旧需要处理IDL允许他们描述的事情。考虑到它的通用性和适应性,可扩展标志语言(eXtensibl Markup Language, XML)似乎是作为一门描述性语言的基础的很好选择。为了在将来的IDL领域中取得领先地位,作者鼓励读者阅读有关XML计划的W3C工作草案以及描述简单对象访问协议
(Simple Object Access Protocol)的W3C注释:
http://www.w3.org/TR/xmlschema-0
http://www.w3.org/TR/xmlschema-1
http://www.w3.org/TR/xmlschema-2
http://www.w3.org/TR/soap.html
作者欢迎反馈,任何问题、评论和纠正都可以通过e-mail发送到marting@develop.com。本书还有一个站点:http://www.develop.com/marting/essentialidl,该站点是由作者维护的站点中有一个勘误表以及一些示例。
本书适用的读者群
这本书面向的读者群是使用COM、微软事务服务器(MTS)、 C++或者Visual Basic的COM十的开发者以及接口设计人员。它假定读者已经具备了一些有关COM的工作知识,例如,Don Box编写的《Essential COM》中提到的知识或者Ted Pattison编写的《Programming Distributed Applications with COM+ and Microsoft Visual Basic 6.0》中提到的知识。
本书期望达到的目标
这本书被分成了两大部分。第一部分包括前六章,这部分用带有主语、谓语以及形容词的完整的明确的句式描述了IDL中的各种构造。在给出IDL构造的同时,还给出了随同客户调用序列以及方法实现。除第一章外,每一章都有一个小结,小结中列出了有关被讨论的IDL构造的使用方面的一些指导性建议。最后四个章节提供了一个IDL类型、修饰符、关键字以及属性的参考表。
第1章:IDL你好
许多COM开发者或者没有意识到IDL的存在,或者不能确定IDL存在的必要性。那么,第1章就描述了IDL的基础以及它存在的理由,还顺带提供了有关接口定义的一些基础知识。
第2章:一个IDL文件的结构
MIDL编译器能够输出两种格式的类型信息。具体哪一种类型信息出现的频率高取决于一个给定的IDL构造在这个IDL文件中所处的位置。第2章涉及到生成类型信息的细节问题,如何创建代理--存根(proxy-stub)DLL的问题,如何创建本地和远程接口的问题以及如何创建各种文件管理构造的问题。
第3章:数据类型和接口问题
使用适当的数据类型是接口设计以及组件集成的关键问题。第3章涉及到处理基本数据类型的细节问题以及对象引用、用户定义的数据类型、枚举、结构以及联合等知识。本章还涉及到如何确保在任意生成的类型库中出现信息的正确性。这一章还讨论了接口继承性的问题。
序言回到顶部↑
类型就是一切。
这本书详细地描述了组件对象模型的类型系统,它是我所见到的书中描述得最详尽的一本。更重要的是,它详尽地描述了微软的IDL编译器(MIDL.EXE)当前的情况,IDL编译器是COM开发人员用来在COM中定义新的应用专用类型的工具。在理想情况下,MIDL.EXE将如预想的那样能够很好地完成任务。然而,不幸的是,情况不总是这样理想。好在Martin已经花了时间记录了MIDL.EXE模糊的地方,以致于我们能够避免[oleautomation]与/Oicf的相似性带来的这一类的风险。
在COM发展的现阶段,是很容易忽略掉一本有关IDL的书的。Common Language
Runtime即将用System.Object和元数据取代IUnknown和IDL而对组件开发进行改革,你可能会对IDL在现代组件开发中所处的地位提出疑问。然而,假定类型信息是在Common Language Runtime中将已管理的(managed)和未管理的(native)代码结合在一起的关键,那么正确地使用IDL将能够确保你的COM组件在即将到来的.NET世界中有一个光明的未来。此外,只要关键的操作系统组件一直用未管理的代码来编写,那么,即使在每个应用程序都转成C#以后,使用IDL以及TLB来访问这些组件依旧至关重要。
Common Language Runtime可能会使得对接口定义语言的需求减弱,然而定义类型接口(那些独立于它们应用的组件的接口)的价值就在于在新的世界中相应地不变。从这种意义上讲,IDL的精神会在最后一个基于IUnknown的接口消失以后也仍然存在。在那天到来之前,我们很幸运有这样一本书能够指导我们理解COM IDL的语法和语义。
Don Box
曼哈顿 海滨,加利福尼亚
2000年9月
这本书详细地描述了组件对象模型的类型系统,它是我所见到的书中描述得最详尽的一本。更重要的是,它详尽地描述了微软的IDL编译器(MIDL.EXE)当前的情况,IDL编译器是COM开发人员用来在COM中定义新的应用专用类型的工具。在理想情况下,MIDL.EXE将如预想的那样能够很好地完成任务。然而,不幸的是,情况不总是这样理想。好在Martin已经花了时间记录了MIDL.EXE模糊的地方,以致于我们能够避免[oleautomation]与/Oicf的相似性带来的这一类的风险。
在COM发展的现阶段,是很容易忽略掉一本有关IDL的书的。Common Language
Runtime即将用System.Object和元数据取代IUnknown和IDL而对组件开发进行改革,你可能会对IDL在现代组件开发中所处的地位提出疑问。然而,假定类型信息是在Common Language Runtime中将已管理的(managed)和未管理的(native)代码结合在一起的关键,那么正确地使用IDL将能够确保你的COM组件在即将到来的.NET世界中有一个光明的未来。此外,只要关键的操作系统组件一直用未管理的代码来编写,那么,即使在每个应用程序都转成C#以后,使用IDL以及TLB来访问这些组件依旧至关重要。
Common Language Runtime可能会使得对接口定义语言的需求减弱,然而定义类型接口(那些独立于它们应用的组件的接口)的价值就在于在新的世界中相应地不变。从这种意义上讲,IDL的精神会在最后一个基于IUnknown的接口消失以后也仍然存在。在那天到来之前,我们很幸运有这样一本书能够指导我们理解COM IDL的语法和语义。
Don Box
曼哈顿 海滨,加利福尼亚
2000年9月








点击看大图





加载中...

