Aracılığıyla paylaş


Marshal.GetFunctionPointerForDelegate Yöntem

Tanım

Aşırı Yüklemeler

Name Description
GetFunctionPointerForDelegate(Delegate)
Geçersiz.

Bir temsilciyi yönetilmeyen koddan çağrılabilen bir işlev işaretçisine dönüştürür.

GetFunctionPointerForDelegate<TDelegate>(TDelegate)

Belirtilen türde bir temsilciyi yönetilmeyen koddan çağrılabilen bir işlev işaretçisine dönüştürür.

GetFunctionPointerForDelegate(Delegate)

Kaynak:
Marshal.cs
Kaynak:
Marshal.cs
Kaynak:
Marshal.cs
Kaynak:
Marshal.cs
Kaynak:
Marshal.cs

Dikkat

GetFunctionPointerForDelegate(Delegate) may be unavailable in future releases. Instead, use GetFunctionPointerForDelegate<T>(T). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296522

Bir temsilciyi yönetilmeyen koddan çağrılabilen bir işlev işaretçisine dönüştürür.

public:
 static IntPtr GetFunctionPointerForDelegate(Delegate ^ d);
[System.Obsolete("GetFunctionPointerForDelegate(Delegate) may be unavailable in future releases. Instead, use GetFunctionPointerForDelegate<T>(T). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296522")]
[System.Security.SecurityCritical]
public static IntPtr GetFunctionPointerForDelegate(Delegate d);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the delegate might not be available. Use the GetFunctionPointerForDelegate<TDelegate> overload instead.")]
public static IntPtr GetFunctionPointerForDelegate(Delegate d);
public static IntPtr GetFunctionPointerForDelegate(Delegate d);
[System.Security.SecurityCritical]
public static IntPtr GetFunctionPointerForDelegate(Delegate d);
[<System.Obsolete("GetFunctionPointerForDelegate(Delegate) may be unavailable in future releases. Instead, use GetFunctionPointerForDelegate<T>(T). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296522")>]
[<System.Security.SecurityCritical>]
static member GetFunctionPointerForDelegate : Delegate -> nativeint
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the delegate might not be available. Use the GetFunctionPointerForDelegate<TDelegate> overload instead.")>]
static member GetFunctionPointerForDelegate : Delegate -> nativeint
static member GetFunctionPointerForDelegate : Delegate -> nativeint
[<System.Security.SecurityCritical>]
static member GetFunctionPointerForDelegate : Delegate -> nativeint
Public Shared Function GetFunctionPointerForDelegate (d As Delegate) As IntPtr

Parametreler

d
Delegate

Yönetilmeyen koda geçirilecek temsilci.

Döndürülenler

IntPtr

nativeint

Yönetilmeyen koda geçirilebilen ve bunu kullanarak temel alınan yönetilen temsilciyi çağırabilen bir değer.

Öznitelikler

Özel durumlar

parametresi genel bir tür tanımıdır.

parametresi 'dir.

Dinamik giriş noktası ayırma geçerli ortamda desteklenmiyor.

Açıklamalar

Temsilci , varsayılan platform çağırma kuralı kullanılarak yönetilmeyen koda geçirilebilen bir işlev işaretçisine dönüştürülür. çağrısı kuralını, öğesini temsilciye uygulayarak ayarlayabilirsiniz.

Temsilcinin, yönetilen koddan çöp toplayıcı tarafından toplanmasını el ile tutmanız gerekir. Çöp toplayıcı yönetilmeyen kod başvurularını izlemez. Yerel çağrı tamamlanmadan önce temsilcinin toplanmasını önlemek için kullanın :

var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.

Bir temsilciyi sıralayan ve kullanıcı adına işleyebilen bir P/Invoke:

var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.

Yerel kod işlev işaretçisini çağrı süresinin ötesinde depolarsa, temsilciyi tüm ömrü boyunca (örneğin, bir alanda depolayarak) kök oluşturun.

Bu API, Windows üzerinde , SELinux'ta ve WebAssembly gibi dinamik giriş noktası ayırmayı desteklemeyen ortamlarda desteklenmez.

bunun yerine işlev işaretçilerinin kullanılması önerilir. İşlev işaretçileri daha verimlidir, doğru kullanımı daha kolaydır ve tüm ortamlarda desteklenir.

Şunlara uygulanır

GetFunctionPointerForDelegate<TDelegate>(TDelegate)

Kaynak:
Marshal.cs
Kaynak:
Marshal.cs
Kaynak:
Marshal.cs
Kaynak:
Marshal.cs
Kaynak:
Marshal.cs

Belirtilen türde bir temsilciyi yönetilmeyen koddan çağrılabilen bir işlev işaretçisine dönüştürür.

public:
generic <typename TDelegate>
 static IntPtr GetFunctionPointerForDelegate(TDelegate d);
[System.Security.SecurityCritical]
public static IntPtr GetFunctionPointerForDelegate<TDelegate>(TDelegate d);
public static IntPtr GetFunctionPointerForDelegate<TDelegate>(TDelegate d);
[<System.Security.SecurityCritical>]
static member GetFunctionPointerForDelegate : 'Delegate -> nativeint
static member GetFunctionPointerForDelegate : 'Delegate -> nativeint
Public Shared Function GetFunctionPointerForDelegate(Of TDelegate) (d As TDelegate) As IntPtr

Tür Parametreleri

TDelegate

Dönüştürülecek temsilcinin türü.

Parametreler

d
TDelegate

Yönetilmeyen koda geçirilecek temsilci.

Döndürülenler

IntPtr

nativeint

Yönetilmeyen koda geçirilebilen ve bunu kullanarak temel alınan yönetilen temsilciyi çağırabilen bir değer.

Öznitelikler

Özel durumlar

parametresi genel bir tür tanımıdır.

parametresi 'dir.

Dinamik giriş noktası ayırma geçerli ortamda desteklenmiyor.

Açıklamalar

Temsilci , varsayılan platform çağırma kuralı kullanılarak yönetilmeyen koda geçirilebilen bir işlev işaretçisine dönüştürülür. çağrısı kuralını, öğesini temsilciye uygulayarak ayarlayabilirsiniz.

Temsilcinin, yönetilen koddan çöp toplayıcı tarafından toplanmasını el ile tutmanız gerekir. Çöp toplayıcı yönetilmeyen kod başvurularını izlemez. Yerel çağrı tamamlanmadan önce temsilcinin toplanmasını önlemek için kullanın :

var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.

Bir temsilciyi sıralayan ve kullanıcı adına işleyebilen bir P/Invoke:

var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.

Yerel kod işlev işaretçisini çağrı süresinin ötesinde depolarsa, temsilciyi tüm ömrü boyunca (örneğin, bir alanda depolayarak) kök oluşturun.

Bu API, Windows üzerinde , SELinux'ta ve WebAssembly gibi dinamik giriş noktası ayırmayı desteklemeyen ortamlarda desteklenmez.

bunun yerine işlev işaretçilerinin kullanılması önerilir. İşlev işaretçileri daha verimlidir, doğru kullanımı daha kolaydır ve tüm ortamlarda desteklenir.

Şunlara uygulanır