Marshal.GetFunctionPointerForDelegate Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Overload
| Nama | Deskripsi |
|---|---|
| GetFunctionPointerForDelegate(Delegate) |
Kedaluwarsa.
Mengonversi delegasi menjadi penunjuk fungsi yang dapat dipanggil dari kode yang tidak dikelola. |
| GetFunctionPointerForDelegate<TDelegate>(TDelegate) |
Mengonversi delegasi jenis tertentu ke penunjuk fungsi yang dapat dipanggil dari kode yang tidak dikelola. |
GetFunctionPointerForDelegate(Delegate)
- Sumber:
- Marshal.cs
- Sumber:
- Marshal.cs
- Sumber:
- Marshal.cs
- Sumber:
- Marshal.cs
- Sumber:
- Marshal.cs
Perhatian
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
Mengonversi delegasi menjadi penunjuk fungsi yang dapat dipanggil dari kode yang tidak dikelola.
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
Parameter
- d
- Delegate
Delegasi yang akan diteruskan ke kode yang tidak dikelola.
Mengembalikan
nativeint
Nilai yang dapat diteruskan ke kode yang tidak dikelola, yang, pada gilirannya, dapat menggunakannya untuk memanggil delegasi terkelola yang mendasar.
- Atribut
Pengecualian
Parameter adalah definisi jenis generik.
Parameternya adalah .
Alokasi titik masuk dinamis tidak didukung di lingkungan saat ini.
Keterangan
Delegasi dikonversi ke penunjuk fungsi yang dapat diteruskan ke kode yang tidak dikelola menggunakan konvensi panggilan platform default. Anda dapat mengatur konvensi panggilan dengan menerapkannya ke delegasi.
Anda harus secara manual menjaga delegasi agar tidak dikumpulkan oleh pengumpul sampah dari kode terkelola. Pengumpul sampah tidak melacak referensi ke kode yang tidak dikelola. Gunakan untuk mencegah delegasi dikumpulkan sebelum panggilan asli selesai:
var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.
P/Invoke yang mendelegasikan delegasi menangani atas nama pengguna:
var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.
Jika kode asli menyimpan penunjuk fungsi di luar durasi panggilan, akar delegasi untuk seluruh masa pakainya — misalnya, dengan menyimpannya di bidang.
API ini tidak didukung di lingkungan yang tidak mendukung alokasi titik masuk dinamis, seperti pada Windows, di SELinux, dan WebAssembly.
Disarankan untuk menggunakan penunjuk fungsi dan sebagai gantinya. Penunjuk fungsi lebih efisien, lebih mudah digunakan dengan benar, dan didukung di semua lingkungan.
Berlaku untuk
GetFunctionPointerForDelegate<TDelegate>(TDelegate)
- Sumber:
- Marshal.cs
- Sumber:
- Marshal.cs
- Sumber:
- Marshal.cs
- Sumber:
- Marshal.cs
- Sumber:
- Marshal.cs
Mengonversi delegasi jenis tertentu ke penunjuk fungsi yang dapat dipanggil dari kode yang tidak dikelola.
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
Jenis parameter
- TDelegate
Jenis delegasi yang akan dikonversi.
Parameter
- d
- TDelegate
Delegasi yang akan diteruskan ke kode yang tidak dikelola.
Mengembalikan
nativeint
Nilai yang dapat diteruskan ke kode yang tidak dikelola, yang, pada gilirannya, dapat menggunakannya untuk memanggil delegasi terkelola yang mendasar.
- Atribut
Pengecualian
Parameter adalah definisi jenis generik.
Parameternya adalah .
Alokasi titik masuk dinamis tidak didukung di lingkungan saat ini.
Keterangan
Delegasi dikonversi ke penunjuk fungsi yang dapat diteruskan ke kode yang tidak dikelola dengan menggunakan konvensi panggilan platform default. Anda dapat mengatur konvensi panggilan dengan menerapkannya ke delegasi.
Anda harus secara manual menjaga delegasi agar tidak dikumpulkan oleh pengumpul sampah dari kode terkelola. Pengumpul sampah tidak melacak referensi ke kode yang tidak dikelola. Gunakan untuk mencegah delegasi dikumpulkan sebelum panggilan asli selesai:
var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.
P/Invoke yang mendelegasikan delegasi menangani atas nama pengguna:
var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.
Jika kode asli menyimpan penunjuk fungsi di luar durasi panggilan, akar delegasi untuk seluruh masa pakainya — misalnya, dengan menyimpannya di bidang.
API ini tidak didukung di lingkungan yang tidak mendukung alokasi titik masuk dinamis, seperti pada Windows, di SELinux, dan WebAssembly.
Disarankan untuk menggunakan penunjuk fungsi dan sebagai gantinya. Penunjuk fungsi lebih efisien, lebih mudah digunakan dengan benar, dan didukung di semua lingkungan.