Freigeben über


CA1400: Für P/Invoke müssen Einstiegspunkte vorhanden sein

TypeName

PInvokeEntryPointsShouldExist

CheckId

CA1400

Kategorie

Microsoft.Interoperability

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Eine öffentliche oder geschützte Methode ist mit dem System.Runtime.InteropServices.DllImportAttribute gekennzeichnet. Entweder konnte die nicht verwaltete Bibliothek nicht gefunden werden, oder die Methode konnte keiner Funktion in der Bibliothek zugeordnet werden. Wenn die Regel den Methodennamen nicht in genau der angegebenen Form finden kann, wird nach Schreibweisen im ANSI- oder Breitzeichenformat gesucht, wobei an den Methodennamen die Zeichen "A" bzw. "W" gehängt werden. Wird keine Entsprechung gefunden, versucht die Regel, eine Funktion mithilfe des Namensformats __stdcall (_MyMethod@12, wobei 12 die Länge der Argumente darstellt) zu finden. Wenn keine Entsprechung gefunden wird und der Methodenname mit "#" beginnt, sucht die Regel nach der Funktion als Ordnungszahlverweis und nicht als Namensverweis.

Regelbeschreibung

Es ist keine Kompilierzeitüberprüfung verfügbar, mit der sichergestellt werden kann, dass sich Methoden, die mit DllImportAttribute markiert sind, in der nicht verwalteten DLL befinden, auf die verwiesen wird. Wenn es in der Bibliothek keine Funktion mit dem angegebenen Namen gibt oder wenn die Argumente der Methode nicht mit den Funktionsargumenten übereinstimmen, löst die Common Language Runtime eine Ausnahme aus.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, korrigieren Sie die Methode, die über das DllImportAttribute-Attribut verfügt. Stellen Sie sicher, dass die nicht verwaltete Bibliothek existiert und sich im gleichen Verzeichnis befindet wie die Assembly, welche die Methode enthält. Wenn die Bibliothek vorhanden ist und der Verweis darauf einwandfrei ist, überprüfen Sie, ob der Methodenname, der Rückgabetyp und die Argumentsignatur der Bibliothekfunktion entsprechen.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel, wenn die nicht verwaltete Bibliothek sich im selben Verzeichnis befindet wie die verwaltete Assembly, die auf diese Bibliothek verweist. Eine Warnung dieser Regel kann u. U. gefahrlos unterdrückt werden, wenn die nicht verwaltete Bibliothek nicht gefunden wurde.

Beispiel

Im folgenden Beispiel wird ein Typ veranschaulicht, der gegen die Regel verstößt. In kernel32.dll ist keine Funktion mit dem Namen DoSomethingUnmanaged vorhanden.

using System.Runtime.InteropServices;

namespace InteroperabilityLibrary
{
   public class NativeMethods
   {
      // If DoSomethingUnmanaged does not exist, or has 
      // a different signature or return type, the following 
      // code violates rule PInvokeEntryPointsShouldExist.
      [DllImport("kernel32.dll")]
      public static extern void DoSomethingUnmanaged();
   }
}

Siehe auch

Referenz

System.Runtime.InteropServices.DllImportAttribute