应用互操作特性
System.Runtime.InteropServices 命名空间提供了三种类别的互操作特定特性:您在设计时应用的特性、COM 互操作工具和 API 在转换过程中应用的特性,以及您或 COM 互操作应用的特性。
如果您不熟悉将特性应用于托管代码这一任务,请参见利用特性扩展元数据。 与其他自定义特性类似,Interop 特定的特性可以应用于类型、方法、属性、参数、字段和其他成员。
设计时特性
利用设计时特性,可以调整 COM 互操作工具和 API 所执行的转换过程的结果。 下表将说明可应用于托管源代码的特性。 有时,COM 互操作工具也可能会应用下表所述的特性。
特性 |
说明 |
---|---|
指定是否应该使用自动化封送拆收器或自定义代理及存根 (Stub) 对该类型进行封送处理。 |
|
控制为类生成的接口类型。 |
|
标识从类型库导入的初始 coclass 的 CLSID。 COM 互操作工具通常应用此特性。 |
|
指示 coclass 或接口定义是从 COM 类型库导入的。 运行时利用此标志来确定如何激活和封送类型。 该特性禁止将类型导回类型库。 COM 互操作工具通常应用此特性。 |
|
指示应该在注册程序集(使其可从 COM 中使用)时调用方法,以便在注册过程中执行用户编写的代码。 |
|
标识作为类事件源代码的接口。 COM 互操作工具可应用此特性。 |
|
指定应该在从 COM 中注销程序集时调用方法,以便在此过程中执行用户编写的代码。 |
|
使类型在特性值等于 false 时对于 COM 不可见。 可以向单个类型或整个程序集应用此特性,以控制 COM 可见性。 默认情况下,所有托管的公共类型都是可见的,因此不需要使用该特性来使其变为可见。 |
|
指定方法或字段的 COM 调度标识符 (DISPID)。 该特性包含它所描述的方法、字段或属性的 DISPID。 COM 互操作工具可应用此特性。 |
|
指示当与 StructLayoutAttribute 一起使用且将 LayoutKind 设置为 Explicit 时,每个字段在类中的物理位置。 |
|
指定类、接口或整个类型库的全局唯一标识符 (GUID)。 传递给特性的字符串必须为类型 System.Guid 可接受的构造函数参数格式。 COM 互操作工具可应用此特性。 |
|
指示当向 COM 公开双重接口和调度接口时公共语言运行时使用何种 IDispatch 接口实现。 |
|
指示应将数据封送到调用方中。 可用于表示参数的特性。 |
|
控制如何向 COM 客户端(双重、由 IUnknown 导出或仅 IDispatch)公开托管接口。 COM 互操作工具可应用此特性。 |
|
指示非托管方法签名需要 LCID 参数。 COM 互操作工具可应用此特性。 |
|
指示字段或参数中的数据应如何在托管和非托管代码之间封送。 由于每种数据类型都具有默认的封送行为,所以此特性始终是可选的。 COM 互操作工具可应用此特性。 |
|
指示参数是可选的。 COM 互操作工具可应用此特性。 |
|
指示字段或参数中的数据必须从被调用的对象封送回它的调用方。 |
|
防止通常在互用调用时发生的 HRESULT 或 retval 签名转换。 此特性将影响封送以及类型库导出。 COM 互操作工具可应用此特性。 |
|
指定 .NET Framework 类的 ProgID。 可用于表示类的特性。 |
|
控制类的各字段的物理布局。 COM 互操作工具可应用此特性。 |
转换工具特性
下表将说明 COM 互操作工具在转换过程应用的特性。 这些特性不在设计时应用。
特性 |
说明 |
---|---|
指示参数或字段类型的 COM 别名。 可用于表示参数、字段或返回值的特性。 |
|
指示从类型库向程序集导入类或接口时丢失了有关信息。 |
|
标识源接口和实现事件接口方法的类。 |
|
指示程序集最初是从 COM 类型库导入的。 此特性包含原类型库的类型库定义。 |
|
包含最初为此函数从 COM 类型库导入的 FUNCFLAGS。 |
|
包含最初为此类型从 COM 类型库导入的 TYPEFLAGS。 |
|
包含最初为此变量从 COM 类型库导入的 VARFLAGS。 |
请参见
参考
System.Runtime.InteropServices