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

Aktualisiert: November 2007

     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

Zur Kompilierungszeit wird nicht überprüft, ob in der nicht verwalteten DLL, auf die verwiesen wird, mit DllImportAttribute gekennzeichnete Methoden vorhanden sind. 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.

Behandlung 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 Warnungen unterdrückt werden sollten

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. Die Datei kernel32.dll enthält keine Funktion mit dem Namen DoSomethingUnmanaged.

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