|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。 第六节、接口转换
C#中不但撑持.Net平台,并且撑持COM平台。为了撑持COM和.Net,C#包括一种称为属性的共同言语特征。一个属性实践上就是一个C#类,它经由过程润色源代码来供应元信息。属性使C#可以撑持特定的手艺,如COM和.Net,而不会搅扰言语标准自己。C#供应将COM接口转换为C#接口的属性类。另外一些属性类将COM类转换为C#类。实行这些转换不必要任何IDL或类工场。
如今部署的任何COM组件都能够在接口转换中利用。一般情形下,所需的调剂是完整主动举行的。
出格是,可使用运转时可挪用包装(RCW)从.NET框架会见COM组件。此包装将COM组件供应的COM接口转换为与.NET框架兼容的接口。关于OLE主动化接口,RCW能够从范例库中主动天生;关于非OLE主动化接口,开辟职员能够编写自界说RCW,手动将COM接口供应的范例映照为与.NET框架兼容的范例。
利用ComImport援用COM组件
COMInterop供应对现有COM组件的会见,而不必要修正原始组件。利用ComImport援用COM组件常包含上面几个方面的成绩:
1、创立COM工具。
2、断定COM接口是不是由工具完成。
3、挪用COM接口上的办法。
4、完成可由COM客户端挪用的工具和接口。
创立COM类包装
要使C#代码援用COM工具和接口,必要在C#中包括COM接口的界说。完成此操纵的最复杂办法是利用TlbImp.exe(范例库导进程序),它是一个包含在.NET框架SDK中的命令行工具。TlbImp将COM范例库转换为.NET框架元数据,从而无效地创立一个能够从任何托管言语挪用的托管包装。用TlbImp创立的.NET框架元数据能够经由过程/R编译器选项包含在C#外部版本中。假如利用VisualStudio开辟情况,则只需增加对COM范例库的援用,将为您主动完成此转换。
TlbImp实行以下转换:
1、COMcoclass转换为具有没有参数机关函数的C#类。
2、COM布局转换为具有大众字段的C#布局。
反省TlbImp输入的一种很好的办法是运转.NET框架SDK命令行工具Ildasm.exe(Microsoft两头言语反汇编程序)来检察转换了局。
固然TlbImp是将COM界说转换为C#的首选办法,但也不是任什么时候候都可使用它(比方,在没有COM界说的范例库时大概TlbImp没法处置范例库中的界说时,就不克不及利用该办法)。在这些情形下,另外一种办法是利用C#属性在C#源代码中手动界说COM界说。创立C#源映照后,只需编译C#源代码便可发生托管包装。
实行COM映照必要了解的次要属性包含:
1、ComImport:它将类标志为在内部完成的COM类。
2、Guid:它用于为类或接口指定通用独一标识符(UUID)。
3、InterfaceType,它指定接口是从IUnknown仍是从IDispatch派生。
4、PreserveSig,它指定是不是应将本机前往值从HRESULT转换为.NET框架非常。
声明COMcoclass
COMcoclass在C#中暗示为类。这些类必需具有与其联系关系的ComImport属性。以下限定合用于这些类:
1、类不克不及从任何其他类承继。
2、类不克不及完成任何接口。
4、类还必需具无为其设置全局独一标识符(GUID)的Guid属性。
以下示例在C#中声明一个coclass:
//声明一个COM类FilgraphManager
[ComImport,Guid("E436EBB3-524F-11CE-9F53-0020AF0BA770")]
classFilgraphManager
{}
C#编译器将增加一个无参数机关函数,能够挪用此机关函数来创立COMcoclass的实例。
共4页:上一页1[2][3][4]下一页
捆绑编译器。用户不需要受制于厂家,自己就能将程序在新平台上编译运行。除了牛B轰轰的linux,估计也没有系统捆绑c/c++的编译器,而且许多新平台都无法支持复杂的c/c++编译器在上面直接运行。 |
|