UnmanagedCallersOnlyAttribute 类

定义

任何用 UnmanagedCallersOnlyAttribute 标记的方法都可以直接从本机代码调用。 可以使用 C# 中的 地址 运算符加载到局部变量,并将其作为回调传递给本机方法。

public ref class UnmanagedCallersOnlyAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class UnmanagedCallersOnlyAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
type UnmanagedCallersOnlyAttribute = class
    inherit Attribute
Public NotInheritable Class UnmanagedCallersOnlyAttribute
Inherits Attribute
继承
UnmanagedCallersOnlyAttribute
属性

示例

以下示例演示如何将标记为 UnmanagedCallersOnlyAttribute 本机函数的回调传递给本机函数。

[DllImport("NativeLibrary")]
internal static extern unsafe void NativeFunctionWithCallback(delegate* unmanaged[Cdecl]<int, int> callback);

[UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvCdecl) })]
private static int DoubleInt(int i) => i * 2;

public static unsafe void PassCallbackToNativeFunction()
{
    NativeFunctionWithCallback(&DoubleInt);
}

注解

用此属性标记的方法具有以下限制:

  • 必须标记 static
  • 不得从托管代码调用。
  • 必须只有 blittable 参数。
  • 不得具有泛型类型参数或包含在泛型类中。

构造函数

名称 说明
UnmanagedCallersOnlyAttribute()

初始化新的 UnmanagedCallersOnlyAttribute 实例。

字段

名称 说明
CallConvs

Optional. 如果省略,运行时将使用 默认平台调用约定

EntryPoint

Optional. 如果省略,编译期间不会发出任何命名导出。

属性

名称 说明
TypeId

在派生类中实现时,获取此 Attribute的唯一标识符。

(继承自 Attribute)

方法

名称 说明
Equals(Object)

返回一个值,该值指示此实例是否等于指定对象。

(继承自 Attribute)
GetHashCode()

返回此实例的哈希代码。

(继承自 Attribute)
GetType()

获取当前实例的 Type

(继承自 Object)
IsDefaultAttribute()

在派生类中重写时,指示此实例的值是否为派生类的默认值。

(继承自 Attribute)
Match(Object)

在派生类中重写时,返回一个值,该值指示此实例是否等于指定对象。

(继承自 Attribute)
MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
ToString()

返回一个表示当前对象的字符串。

(继承自 Object)

适用于