CA1415: Dichiarare correttamente P/Invoke
Articolo | Valore |
---|---|
ID regola | CA1415 |
Categoria | Microsoft.Interoperability |
Modifica | Non di rilievo: se il P/Invoke che dichiara il parametro non può essere visualizzato all'esterno dell'assembly. Interruzione: se il P/Invoke che dichiara il parametro può essere visualizzato all'esterno dell'assembly. |
Causa
Un metodo platform invoke non è dichiarato correttamente.
Descrizione regola
Un metodo platform invoke accede al codice non gestito e viene definito usando la Declare
parola chiave in Visual Basic o .System.Runtime.InteropServices.DllImportAttribute Attualmente, questa regola cerca dichiarazioni di metodo platform invoke destinate a funzioni Win32 con un puntatore a un OVERLAPPED
parametro di struttura e il parametro gestito corrispondente non è un puntatore a una System.Threading.NativeOverlapped struttura.
Come correggere le violazioni
Per correggere una violazione di questa regola, dichiarare correttamente il metodo platform invoke.
Quando eliminare gli avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio seguente vengono illustrati i metodi platform invoke che violano la regola e soddisfano la regola.
using System;
using System.Runtime.InteropServices;
using System.Threading;
namespace InteroperabilityLibrary
{
// The platform invoke methods in this class violate the rule.
[ComVisible(true)]
internal class NativeMethods
{
private NativeMethods() { }
[DllImport("kernel32.dll", SetLastError = true)]
internal extern static uint ReadFile(
IntPtr hFile, IntPtr lpBuffer, int nNumberOfBytesToRead,
IntPtr lpNumberOfBytesRead, IntPtr overlapped);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal extern static bool ReadFileEx(
IntPtr hFile, IntPtr lpBuffer, int nNumberOfBytesToRead,
NativeOverlapped overlapped, IntPtr lpCompletionRoutine);
}
// The platform invoke methods in this class satisfy the rule.
[ComVisible(true)]
internal class UnsafeNativeMethods
{
private UnsafeNativeMethods() { }
//To compile this code, uncomment these lines and compile
//with "/unsafe".
//[DllImport("kernel32.dll", SetLastError = true)]
//unsafe internal extern static uint ReadFile(
// IntPtr hFile, IntPtr lpBuffer, int nNumberOfBytesToRead,
// IntPtr lpNumberOfBytesRead, NativeOverlapped* overlapped);
//[DllImport("kernel32.dll", SetLastError = true)]
//[return: MarshalAs(UnmanagedType.Bool)]
//unsafe internal extern static bool ReadFileEx(
// IntPtr hFile, IntPtr lpBuffer, int nNumberOfBytesToRead,
// NativeOverlapped* overlapped, IntPtr lpCompletionRoutine);
}
}
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per