应用自定义特性以改写默认 COM 调度标识符 (DISPID)
非托管 COM 中的调度接口具有一个默认成员(DISPID_VALUE 或 0),当缺少指定的 DISPID 时,会调用该成员。 .NET Framework 无法引用默认方法或属性;因此,在导入时,您可以使用此 custom 特性将任意 DISPID 指定为默认成员。 此 custom 特性的语法如下:
GUID = CD2BC5C9-F452-4326-B714-F9C539D4DA58
Value = number indicating the default DISPID
示例
下面的示例是用接口定义语言 (IDL) 编写的,它演示如何使用 custom DISPID 特性来指定在导入时使用 DISPID 为 2 的成员 method1 作为默认成员。
[
object,
uuid(5EA05866-2E49-421C-BE47-FF62C5B9504E),
dual,
helpstring("IMyClass Interface"),
pointer_default(unique)
]
interface IMyClass : IDispatch
{
// Use the default dispID.
[custom(CD2BC5C9-F452-4326-B714-F9C539D4DA58, 0), id(2), helpstring("method method1")] HRESULT method1();
};
[
uuid(186D98EE-6750-42B9-947D-B82CF4A94600),
helpstring("MyClass Class")
]
coclass MyClass
{
[default] interface IMyClass;
};
导入类型库后,最终得到的 MSIL 看上去类似下面这样:
.method public hidebysig newslot abstract virtual
instance void method1() runtime managed internalcall
{
.custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 03 00 00 00 00 00 )
} // This is the end of method IMyClass::method1.