UnmanagedCallersOnlyAttribute 类

定义

标记有 UnmanagedCallersOnlyAttribute 的任何方法均可从本机代码中直接调用。 可以使用 C# 的 address-of 运算符将函数令牌加载到局部变量,并作为回叫传递给本机方法。

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

可选。 如果省略,运行时将使用 默认的平台调用约定

EntryPoint

可选。 如果省略,编译过程中便不会发出任何已命名导出。

属性

TypeId

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

(继承自 Attribute)

方法

Equals(Object)

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

(继承自 Attribute)
GetHashCode()

返回此实例的哈希代码。

(继承自 Attribute)
GetType()

获取当前实例的 Type

(继承自 Object)
IsDefaultAttribute()

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

(继承自 Attribute)
Match(Object)

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

(继承自 Attribute)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

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

(继承自 Object)

适用于