CA1415: Declarar P/Invokes corretamente
TypeName |
DeclarePInvokesCorrectly |
CheckId |
CA1415 |
<strong>Categoria</strong> |
Microsoft.Interoperability |
Alteração significativa |
Não-separável - se de P/Invoke que declara o parâmetro não podem ser visto fora do assembly. Quebrando - se de P/Invoke que declara o parâmetro pode ser visto de fora do assembly. |
Causa
Uma plataforma de invocar o método é declarado incorretamente.
Descrição da regra
Uma plataforma chamar código não gerenciado do método acessos e é definida usando o Declare palavra-chave em Visual Basic ou System.Runtime.InteropServices.DllImportAttribute. Atualmente, essa regra procurará as declarações de método que funções do Win32 de destino que possuem um ponteiro para um OVERLAPPED estruturar o parâmetro de invocação de plataforma e o parâmetro gerenciado correspondente não é um ponteiro para uma System.Threading.NativeOverlapped estrutura.
Como corrigir violações
Para corrigir uma violação desta regra, declarar corretamente a plataforma chamar o método.
Quando suprimir avisos
Não suprimir um aviso da regra.
Exemplo
A exemplo a seguir mostra os métodos que violam a regra e satisfazem a regra de invocação de plataforma.
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);
}
}