自定义运行时可调用包装
公共语言运行时从 interop 程序集中的元数据生成运行时可调用包装 (RCW)。 与其他程序集不同的是,interop 程序集是通过导入类型库生成的。 虽然导入过程通常会产生精确的 interop 程序集,但在有些情况下,可以(或必须)修改 interop 程序集来产生自定义 RCW。
有若干个可能自定义 RCW 的原因,例如:
一个或多个类型需要附加的封送处理信息。
类型库包含许多封送拆收器无法识别的专用类型。
大型类型库可以包含应用程序不需要的类型。 通过从托管源代码创建 interop 程序集,可以消除此部署不必要的类型的需要。
具有包含大型类型库中的部分类型的 RCW 源代码可以消除部署不必要的类型的需要。
如下面的插图所示,可以将类型库导入为托管 DLL 而不自定义包装(如图左侧所示)。 或者可以创建自定义包装。
导入的类型库中的封送处理信息
如果必须使用附加的或不同的封送处理指令来自定义运行时可调用包装,有两种选择:
编辑 Interop 程序集,搜索有问题的语法,并用替换语法替换它。 此选项最适合于较小的封送处理更改。
基于现有的接口定义语言 (IDL) 文件或类型库,手动创建包装。 以手动方式声明 COM 类型是一项困难的工作,需要有关于类型库导入程序 (Tlbimp.exe)、interop 封送拆收器的默认行为和 COM 的有效经验。 此方法用在具有整个专用类型库或在需要 RCW 源代码时效果最佳。