Поделиться через


UnmanagedCallersOnlyAttribute Класс

Определение

Любой метод, помеченный UnmanagedCallersOnlyAttribute, можно вызывать напрямую из машинного кода. Затем можно загрузить токен функции в локальную переменную с помощью оператора address-of в 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.
  • Не должен вызываться из управляемого кода.
  • Должны иметь только непреобразуемые аргументы.
  • Не должен иметь параметров универсального типа или содержаться в универсальном классе.

Конструкторы

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)

Применяется к