Marshal.GetFunctionPointerForDelegate Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
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
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.