应用自定义属性来标记非托管 COM Get/Set 特性

非托管 COM 接口可以是通过 Item 方法访问枚举的可枚举对象。 在 .NET Framework 中,此方法被指定为 .Item。 正确访问此方法的唯一方法是通过 IDL 文件中的特性将该项目标记为 propget,但这样做将会更改类型库中函数的签名。 您可以在导入时使用此 custom 特性将该方法标记为 propgetcustom 特性的语法如下:

GUID = 2941ff83-88d8-4f73-b6a9-bdf8712d000d // for propget

此外,您可以在导入时使用其他 custom 特性将方法标记为 propput。 此 custom 特性的语法如下:

GUID = 29533527-3683-4364-abc0-db1add822fa2 // for propput

请注意,此 custom 特性只能应用于方法。 另外,以下规则也适用:

  • 一次只能应用一个特性;如果应用多个特性,则忽略除第一个之外的所有特性。

  • 对于 propgetcustom 特性忽略所有没有返回值的方法签名。

  • 对于 propputcustom 特性忽略所有不使用输入参数(参数可以使用 [in] 或 [out] 加以标记,但不能使用 [out,retval] 加以标记)的方法签名,并且还忽略所有具有返回值的签名。

  • 对于 propgetpropput,如果它们与 id(-4) 或自定义 dispid(-4) 一起使用,则 custom 特性忽略 GetEnumerator 方法。

  • 当使用 Tlbimp.exe 导入类型库时,始终在将 custom 特性应用到只支持调度的接口(调度接口)后使用 /transform:dispret 开关。

示例

下面以接口定义语言 (IDL) 编写的示例演示如何使用 propget 特性:

[custom(2941ff83-88d8-4f73-b6a9-bdf8712d000d, ""), id(6)] 
HRESULT cget(int i, [out, retval] short *pVal);

下面的示例演示如何使用 propput 特性:

[custom(29533527-3683-4364-abc0-db1add822fa2, ""), id(7)] 
HRESULT cset([in] int i);

请参见

参考

TypeLibConverter

ITypeLibConverter

Tlbimp.exe(类型库导入程序)

概念

应用自定义特性实现 IEnumerable

应用自定义特性以改写默认 COM 调度标识符 (DISPID)

将类型库当作程序集导入