EntryPointNotFoundException Klasa

Definicja

Wyjątek, który jest generowany, gdy próba załadowania klasy kończy się niepowodzeniem z powodu braku metody wejścia.The exception that is thrown when an attempt to load a class fails due to the absence of an entry method.

public ref class EntryPointNotFoundException : TypeLoadException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class EntryPointNotFoundException : TypeLoadException
type EntryPointNotFoundException = class
    inherit TypeLoadException
Public Class EntryPointNotFoundException
Inherits TypeLoadException
Dziedziczenie
EntryPointNotFoundException
Atrybuty

Uwagi

Wyjątek EntryPointNotFoundException jest generowany, gdy środowisko uruchomieniowe języka wspólnego nie może załadować zestawu, ponieważ nie może zidentyfikować punktu wejścia zestawu.An EntryPointNotFoundException exception is thrown when the common language runtime is unable to load an assembly because it cannot identify the assembly's entry point. Ten wyjątek może być zgłaszany w następujących warunkach:This exception can be thrown under the following conditions:

  • Środowisko uruchomieniowe języka wspólnego nie może zlokalizować punktu wejścia aplikacji (zwykle metody Main) w zestawie wykonywalnym.The common language runtime is unable to locate an application entry point (typically a Main method) in an executable assembly. Punkt wejścia aplikacji musi być metodą globalną lub static, która nie ma parametrów ani tablicy ciągów jako jedynego parametru.The application entry point must be a global or static method that has either no parameters or a string array as its only parameter. Punkt wejścia może zwracać voidlub może zwrócić Int32 lub UInt32 kod zakończenia.The entry point can return void, or it can return an Int32 or UInt32 exit code. Zestaw aplikacji nie może definiować więcej niż jednego punktu wejścia.An application assembly cannot define more than one entry point.

  • Nie można rozpoznać wywołania funkcji w bibliotece DLL systemu Windows, ponieważ nie można odnaleźć funkcji.The call to a function in a Windows DLL cannot be resolved because the function cannot be found. W poniższym przykładzie zostanie zgłoszony wyjątek EntryPointNotFoundException, ponieważ User32. dll nie zawiera funkcji o nazwie GetMyNumber.In the following example, an EntryPointNotFoundException exception is thrown because User32.dll does not include a function named GetMyNumber.

    using System;
    using System.Runtime.InteropServices;
    
    public class Example
    {
       [DllImport("user32.dll")]
       public static extern int GetMyNumber();
       
       public static void Main()
       {
          try {
             int number = GetMyNumber();
          }
          catch (EntryPointNotFoundException e) {
             Console.WriteLine("{0}:\n   {1}", e.GetType().Name,  
                               e.Message);
          } 
       }
    }
    // The example displays the following output:
    //    EntryPointNotFoundException:
    //       Unable to find an entry point named 'GetMyNumber' in DLL 'User32.dll'.
    
    Module Example
        Declare Auto Function GetMyNumber Lib "User32.dll" () As Integer
    
       Public Sub Main()
          Try
             Dim number As Integer = GetMyNumber()
          Catch e As EntryPointNotFoundException
             Console.WriteLine("{0}:{2}   {1}", e.GetType().Name,  
                               e.Message, vbCrLf)
          End Try   
       End Sub
    End Module
    ' The example displays the following output:
    '    EntryPointNotFoundException:
    '       Unable to find an entry point named 'GetMyNumber' in DLL 'User32.dll'.
    
  • Nie można rozpoznać wywołania funkcji w bibliotece DLL systemu Windows, ponieważ nazwa użyta w wywołaniu metody nie jest zgodna z nazwą znalezioną w zestawie.The call to a function in a Windows DLL cannot be resolved because the name used in the method call does not match a name found in the assembly. Często dzieje się tak, ponieważ pole DllImportAttribute.ExactSpelling jest niejawnie lub jawnie ustawione na true, wywołana metoda zawiera jeden lub więcej parametrów ciągu i ma zarówno wersję ANSI, jak i Unicode, a nazwa użyta w wywołaniu metody nie odpowiada nazwie tej wersji ANSI lub Unicode.Frequently, this occurs because the DllImportAttribute.ExactSpelling field is either implicitly or explicitly set to true, the called method includes one or more string parameters and has both an ANSI and a Unicode version, and the name used in the method call does not correspond to the name of this ANSI or Unicode version. Poniższy przykład przedstawia ilustrację, próbując wywołać funkcję MessageBox systemu Windows w User32. dll.The following example provides an illustration by attempting to call the Windows MessageBox function in User32.dll. Ze względu na to, że pierwsza definicja metody Określa CharSet.Unicode do organizowania ciągów, typowy język szuka wersji znaku większości funkcji, MessageBoxW, zamiast nazwy używanej w wywołaniu metody, MessageBox.Because the first method definition specifies CharSet.Unicode for string marshaling, the common language looks for the wide-character version of the function, MessageBoxW, instead of the name used in the method call, MessageBox. Druga definicja metody rozwiązuje ten problem, wywołując MessageBoxW zamiast funkcji MessageBox.The second method definition corrects this problem by calling the MessageBoxW instead of the MessageBox function.

    using System;
    using System.Runtime.InteropServices;
    
    public class Example
    {
       [DllImport("user32.dll", CharSet = CharSet.Unicode, ExactSpelling = true )]
       public static extern int MessageBox(IntPtr hwnd, String text, String caption, uint type);
     
       [DllImport("user32.dll", CharSet = CharSet.Unicode, ExactSpelling = true )]
       public static extern int MessageBoxW(IntPtr hwnd, String text, String caption, uint type);
    
       public static void Main()
       {
          try {
             MessageBox(new IntPtr(0), "Calling the MessageBox Function", "Example", 0);
          }
          catch (EntryPointNotFoundException e) {
             Console.WriteLine("{0}:\n   {1}", e.GetType().Name,  
                               e.Message);
          }
    
          try {
             MessageBoxW(new IntPtr(0), "Calling the MessageBox Function", "Example", 0);
          }
          catch (EntryPointNotFoundException e) {
             Console.WriteLine("{0}:\n   {1}", e.GetType().Name,  
                               e.Message);
          }
       }
    }
    
    Module Example
       Declare Unicode Function MessageBox Lib "User32.dll" Alias "MessageBox" (
          ByVal hWnd As IntPtr, ByVal txt As String, ByVal caption As String, 
          ByVal typ As UInteger) As Integer  
    
       Declare Unicode Function MessageBox2 Lib "User32.dll" Alias "MessageBoxW" (  
          ByVal hWnd As IntPtr, ByVal txt As String, ByVal caption As String, 
          ByVal typ As UInteger) As Integer  
          
       Public Sub Main()
          Try
             MessageBox(IntPtr.Zero, "Calling the MessageBox Function", "Example", 0 )
          Catch e As EntryPointNotFoundException
             Console.WriteLine("{0}:{2}   {1}", e.GetType().Name,  
                               e.Message, vbCrLf)
          End Try
    
          Try
             MessageBox2(IntPtr.Zero, "Calling the MessageBox Function", "Example", 0 )
          Catch e As EntryPointNotFoundException
             Console.WriteLine("{0}:{2}   {1}", e.GetType().Name,  
                               e.Message, vbCrLf)
          End Try
    
       End Sub
    End Module
    
  • Próbujesz wywołać funkcję w bibliotece dołączanej dynamicznie przy użyciu prostej nazwy, a nie jej nazwy dekoracyjnej.You are trying to call a function in a dynamic link library by its simple name rather than its decorated name. Zazwyczaj C++ kompilator generuje nazwę dekoracyjną dla funkcji DLL.Typically, the C++ compiler generates a decorated name for DLL functions. Na przykład poniższy C++ kod definiuje funkcję o nazwie Double w bibliotece o nazwie TestDll. dll.For example, the following C++ code defines a function named Double in a library named TestDll.dll.

    __declspec(dllexport) int Double(int number)
    {
        return number * 2;
    }
    

    Gdy kod w poniższym przykładzie próbuje wywołać funkcję, zostanie zgłoszony wyjątek EntryPointNotFoundException, ponieważ nie można znaleźć funkcji Double.When the code in the following example tries to call the function, an EntryPointNotFoundException exception is thrown because the Double function cannot be found.

    using System;
    using System.Runtime.InteropServices;
    
    public class Example
    {
       [DllImport("TestDll.dll")]
       public static extern int Double(int number);
    
       public static void Main()
       {
          Console.WriteLine(Double(10));
       }
    }
    // The example displays the following output:
    //    Unhandled Exception: System.EntryPointNotFoundException: Unable to find 
    //    an entry point named 'Double' in DLL '.\TestDll.dll'.
    //       at Example.Double(Int32 number)
    //       at Example.Main()
    
    Module Example
       Public Declare Function DoubleNum Lib ".\TestDll.dll" Alias "Double" _
                      (ByVal number As Integer) As Integer
       
       Public Sub Main()
          Console.WriteLine(DoubleNum(10))
       End Sub
    End Module
    ' The example displays the following output:
    '    Unhandled Exception: System.EntryPointNotFoundException: Unable to find an 
    '    entry point named 'Double' in DLL '.\TestDll.dll'.
    '       at Example.Double(Int32 number)
    '       at Example.Main()
    

    Jeśli jednak funkcja jest wywoływana przy użyciu nazwy dekoracyjnej (w tym przypadku ?Double@@YAHH@Z), wywołanie funkcji powiedzie się, jak pokazano w poniższym przykładzie.However, if the function is called by using its decorated name (in this case, ?Double@@YAHH@Z), the function call succeeds, as the following example shows.

    using System;
    using System.Runtime.InteropServices;
    
    public class Example
    {
       [DllImport("TestDll.dll", EntryPoint = "?Double@@YAHH@Z")]
       public static extern int Double(int number);
    
       public static void Main()
       {
          Console.WriteLine(Double(10));
       }
    }
    // The example displays the following output:
    //    20
    
    Module Example
       Public Declare Function DoubleNum Lib ".\TestDll.dll" Alias "?Double@@YAHH@Z" _
                      (ByVal number As Integer) As Integer
       
       Public Sub Main()
          Console.WriteLine(DoubleNum(10))
       End Sub
    End Module
    ' The example displays the following output:
    '    20 
    

    Nazwy dekoracyjne funkcji wyeksportowanych przez bibliotekę DLL można znaleźć za pomocą narzędzia takiego jak polecenia DUMPBIN. exe.You can find the decorated names of functions exported by a DLL by using a utility such as Dumpbin.exe.

  • Podjęto próbę wywołania metody w zarządzanym zestawie, tak jakby była niezarządzaną biblioteką dołączaną dynamiczną.You are attempting to call a method in a managed assembly as if it were an unmanaged dynamic link library. Aby zobaczyć to w działaniu, skompiluj Poniższy przykład do zestawu o nazwie StringUtilities. dll.To see this in action, compile the following example to an assembly named StringUtilities.dll.

    using System;
    
    public static class StringUtilities
    {
       public static String SayGoodMorning(String name)
       {
          return String.Format("A top of the morning to you, {0}!", name);
       }
    }
    
    Module StringUtilities
       Public Function SayGoodMorning(name As String) As String
          Return String.Format("A top of the morning to you, {0}!", name)
       End Function
    End Module
    

    Następnie Skompiluj i wykonaj Poniższy przykład, który próbuje wywołać metodę StringUtilities.SayGoodMorning w bibliotece dołączanej dynamicznie StringUtilities. dll tak, jakby była niezarządzanym kodem.Then compile and execute the following example, which attempts to call the StringUtilities.SayGoodMorning method in the StringUtilities.dll dynamic link library as if it were unmanaged code. Wynikiem jest wyjątek EntryPointNotFoundException.The result is an EntryPointNotFoundException exception.

    using System;
    using System.Runtime.InteropServices;
    
    public class Example
    {
       [DllImport("StringUtilities.dll", CharSet = CharSet.Unicode )]
       public static extern String SayGoodMorning(String name);
    
       public static void Main()
       {
          Console.WriteLine(SayGoodMorning("Dakota"));
       }
    }
    // The example displays the following output:
    //    Unhandled Exception: System.EntryPointNotFoundException: Unable to find an entry point 
    //    named 'GoodMorning' in DLL 'StringUtilities.dll'.
    //       at Example.GoodMorning(String& name)
    //       at Example.Main()
    
    Module Example
       Declare Unicode Function GoodMorning Lib "StringUtilities.dll" (
          ByVal name As String) As String  
    
       Public Sub Main()
          Console.WriteLine(SayGoodMorning("Dakota"))
       End Sub
    End Module
    ' The example displays the following output:
    '    Unhandled Exception: System.EntryPointNotFoundException: Unable to find an entry point 
    '    named 'GoodMorning' in DLL 'StringUtilities.dll'.
    '       at Example.GoodMorning(String& name)
    '       at Example.Main()
    

    Aby wyeliminować wyjątek, Dodaj odwołanie do zarządzanego zestawu i uzyskaj dostęp do metody StringUtilities.SayGoodMorning tak samo jak w przypadku dostępu do innej metody w kodzie zarządzanym, jak w poniższym przykładzie.To eliminate the exception, add a reference to the managed assembly and access the StringUtilities.SayGoodMorning method just as you would access any other method in managed code, as the following example does.

    using System;
    
    public class Example
    {
       public static void Main()
       {
           Console.WriteLine(StringUtilities.SayGoodMorning("Dakota"));
       }
    }
    // The example displays the following output:
    //        A top of the morning to you, Dakota!
    
    Module Example
       Public Sub Main()
          Console.WriteLine(StringUtilities.SayGoodMorning("Dakota"))
       End Sub
    End Module
    ' The example displays the following output:
    '       A top of the morning to you, Dakota!
    
  • Podjęto próbę wywołania metody w bibliotece DLL COM, tak jakby była to biblioteka DLL systemu Windows.You are trying to call a method in a COM DLL as if it were a Windows DLL. Aby uzyskać dostęp do biblioteki DLL modelu COM, wybierz opcję Dodaj odwołanie w programie Visual Studio, aby dodać odwołanie do projektu, a następnie wybierz bibliotekę typów z karty com .To access a COM DLL, select the Add Reference option in Visual Studio to add a reference to the project, and then select the type library from the COM tab.

Aby uzyskać listę początkowe wartości właściwości wystąpienia EntryPointNotFoundException, zobacz EntryPointNotFoundException konstruktorów.For a list of initial property values for an instance of EntryPointNotFoundException, see the EntryPointNotFoundException constructors.

Konstruktory

EntryPointNotFoundException()

Inicjuje nowe wystąpienie klasy EntryPointNotFoundException klasy.Initializes a new instance of the EntryPointNotFoundException class.

EntryPointNotFoundException(SerializationInfo, StreamingContext)

Inicjuje nowe wystąpienie klasy EntryPointNotFoundException klasy z serializowanych danych.Initializes a new instance of the EntryPointNotFoundException class with serialized data.

EntryPointNotFoundException(String)

Inicjuje nowe wystąpienie klasy EntryPointNotFoundException klasy przy użyciu określonego komunikatu o błędzie.Initializes a new instance of the EntryPointNotFoundException class with a specified error message.

EntryPointNotFoundException(String, Exception)

Inicjuje nowe wystąpienie klasy EntryPointNotFoundException klasy przy użyciu określonego komunikatu o błędzie i odwołania do wewnętrznego wyjątku, który jest przyczyną tego wyjątku.Initializes a new instance of the EntryPointNotFoundException class with a specified error message and a reference to the inner exception that is the cause of this exception.

Właściwości

Data

Pobiera kolekcję par klucz/wartość, które zawierają dodatkowe informacje zdefiniowane przez użytkownika dotyczące wyjątku.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Odziedziczone po Exception)
HelpLink

Pobiera lub ustawia link do pliku pomocy skojarzonego z tym wyjątkiem.Gets or sets a link to the help file associated with this exception.

(Odziedziczone po Exception)
HResult

Pobiera lub ustawia wartość HRESULT, kodowane wartości liczbowe przypisane do określonego wyjątku.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Odziedziczone po Exception)
InnerException

Pobiera wystąpienie Exception, które spowodowało wyjątek bieżący.Gets the Exception instance that caused the current exception.

(Odziedziczone po Exception)
Message

Pobiera komunikat o błędzie dla tego wyjątku.Gets the error message for this exception.

(Odziedziczone po TypeLoadException)
Source

Pobiera lub ustawia nazwę aplikacji lub obiekt, który powoduje błąd.Gets or sets the name of the application or the object that causes the error.

(Odziedziczone po Exception)
StackTrace

Pobiera ciąg reprezentujący bezpośrednie ramki w stosie wywołań.Gets a string representation of the immediate frames on the call stack.

(Odziedziczone po Exception)
TargetSite

Pobiera metodę, która zgłasza bieżący wyjątek.Gets the method that throws the current exception.

(Odziedziczone po Exception)
TypeName

Pobiera w pełni kwalifikowaną nazwę typu, który powoduje wyjątek.Gets the fully qualified name of the type that causes the exception.

(Odziedziczone po TypeLoadException)

Metody

Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetBaseException()

Gdy jest zastępowany w klasie pochodnej, zwraca Exception, który jest główną przyczyną jednego lub kilku kolejnych wyjątków.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Odziedziczone po Exception)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetObjectData(SerializationInfo, StreamingContext)

Ustawia obiekt SerializationInfo z nazwą klasy, nazwą metody, IDENTYFIKATORem zasobu i dodatkowymi informacjami o wyjątku.Sets the SerializationInfo object with the class name, method name, resource ID, and additional exception information.

(Odziedziczone po TypeLoadException)
GetType()

Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia.Gets the runtime type of the current instance.

(Odziedziczone po Exception)
MemberwiseClone()

Tworzy skróconą kopię bieżącego Object.Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ToString()

Tworzy i zwraca reprezentację ciągu bieżącego wyjątku.Creates and returns a string representation of the current exception.

(Odziedziczone po Exception)

Zdarzenia

SerializeObjectState

Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku, który zawiera serializowane dane dotyczące wyjątku.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Odziedziczone po Exception)

Dotyczy

Zobacz też