使用.NET应用的Classic COM组件
从DOS命令行,键入以下命令。
TLBIMP AirlineInformation.tlb /out:AirlineMetadata.dll这个命令告诉类型库导入程序阅读AirlineInfo COM类型库,并且生成相应的元数据包装器,此元数据包装器被称为AirlineMetadata.dll.如果一切顺利,应该看到一个信息,此信息暗示元数据代理已经从类型库产生。
Type library imported to E:\COMInteropWithDOTNET\AirlineMetadata.dll这个生成的元数据包括什么样的类型信息,此信息是什么样子的?像COM 爱好者一样,我们一直喜欢OleView.exe,但是有时候感觉需要浏览一下类型库的内容,或者是瞥一下OleView 所能做的大量事情。幸运的是,.NET SDK 与一个被称为ILDASM的分解器 一起运转,此ILDASM反汇编器允许浏览此元数据以及为托管程序集所生成的中间语言代码。每一个托管程序集包括自由描写的元数据,当需要研究中间语言代码和元数据时,ILDASM是一个非常有用的工具,能给许多帮助。继续向前,使用ILDASM打开AirlineMetadata.dll。仔细看一下被生成的元数据,将发现GetAirlineTiming 方法被列为IAirlineInfo 接口的公共方法,此IAirlineInfo 接口由AirlineInfo 类型执行操作。这里也有一个构造器,是为AirlineInfo 类型准备的。同时也用方法参数的数据类型和返回值来代替等同的.NET 对应体。在例子中,附带有BSTR 数据类型的GetAirlineTiming方法参数被string(System.String的别名)数据类型取代了。同时也要注意GetAirlineTiming方法中标记有[out,retval]的参数被转换成方法的实际返回值(作为string而返回)。任何失败的从COM 对象返回来的HRESULT值(假设是一个错误或者是失败的非选拔的商业逻辑)是作为.NET异常而返回的。
0
相关文章