EntryPointNotFoundException EntryPointNotFoundException EntryPointNotFoundException EntryPointNotFoundException Class

Definice

Výjimka, která je vyvolána, pokud se pokus o načtení třídy nezdaří z důvodu absence metody zápisu.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
Dědičnost
Atributy

Poznámky

EntryPointNotFoundException Výjimka je vyvolána, když modul CLR (Common Language Runtime) nemůže načíst sestavení, protože nemůže identifikovat vstupní bod sestavení.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. Tato výjimka může být vyvolána při splnění následujících podmínek:This exception can be thrown under the following conditions:

  • Modul common language runtime nemůže najít vstupní bod aplikace (obvykle Main metoda) ve spustitelném sestavení.The common language runtime is unable to locate an application entry point (typically a Main method) in an executable assembly. Vstupní bod aplikace musí být globální nebo static metoda, která buď nemá žádné parametry, nebo pole řetězců jako jeho jediný parametr.The application entry point must be a global or static method that has either no parameters or a string array as its only parameter. Vstupní bod může vracet voidnebo může Int32 vracet UInt32 ukončovací kód.The entry point can return void, or it can return an Int32 or UInt32 exit code. Sestavení aplikace nemůže definovat více než jeden vstupní bod.An application assembly cannot define more than one entry point.

  • Volání funkce v knihovně DLL systému Windows nelze přeložit, protože funkci nelze nalézt.The call to a function in a Windows DLL cannot be resolved because the function cannot be found. V následujícím příkladu je vyvolána EntryPointNotFoundException výjimka, protože User32. dll nezahrnuje funkci s názvem. GetMyNumberIn 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'.
    
  • Volání funkce v knihovně DLL systému Windows nelze přeložit, protože název použitý ve volání metody neodpovídá názvu nalezenému v sestavení.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. Často k tomu dochází, protože DllImportAttribute.ExactSpelling pole je buď implicitně nebo explicitně nastaveno na true, volaná metoda obsahuje jeden nebo více parametrů řetězce a má verzi ANSI i Unicode a název použitý ve volání metody není. odpovídá názvu této verze ANSI nebo 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. Následující příklad poskytuje ilustraci při pokusu o volání funkce Windows MessageBox v souboru User32. dll.The following example provides an illustration by attempting to call the Windows MessageBox function in User32.dll. Vzhledem k tomu, že první CharSet.Unicode definice metody určuje pro zařazování řetězců, hledá společný jazyk verzi ve verzi s velkým znakem, MessageBoxWnamísto názvu používaného MessageBoxve volání metody.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. Druhá definice metody opravuje tento problém voláním MessageBoxW MessageBox funkce namísto funkce.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
    
  • Pokoušíte se zavolat funkci v dynamické knihovně pomocí jejího jednoduchého názvu místo dekorované názvu.You are trying to call a function in a dynamic link library by its simple name rather than its decorated name. C++ Kompilátor obvykle generuje dekorované názvy pro funkce knihovny DLL.Typically, the C++ compiler generates a decorated name for DLL functions. Například následující C++ kód definuje funkci s názvem Double v knihovně s názvem 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;
    }
    

    Když se kód v následujícím příkladu pokusí zavolat funkci, je vyvolána EntryPointNotFoundException výjimka, Double protože funkce nebyla nalezena.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()
    

    Nicméně pokud je funkce volána pomocí dekorované názvu (v tomto případě ?Double@@YAHH@Z), volání funkce bude úspěšné, jak ukazuje následující příklad.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 
    

    Dekorované názvy funkcí exportovaných knihovnou DLL můžete najít pomocí nástroje, jako je například dumpbin. exe.You can find the decorated names of functions exported by a DLL by using a utility such as Dumpbin.exe.

  • Pokoušíte se zavolat metodu ve spravovaném sestavení, jako by šlo o nespravovanou dynamickou knihovnu.You are attempting to call a method in a managed assembly as if it were an unmanaged dynamic link library. Chcete-li se podívat, jak je vidět v akci, zkompilujte následující příklad do sestavení s názvem 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
    

    Potom zkompilujte a spusťte následující příklad, který se pokusí zavolat StringUtilities.SayGoodMorning metodu v dynamické knihovně StringUtilities. dll knihovny, jako by šlo o nespravovaný kód.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. Výsledkem je EntryPointNotFoundException výjimka.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()
    

    Chcete-li výjimku odstranit, přidejte odkaz na spravované sestavení a přístup StringUtilities.SayGoodMorning k metodě stejně, jako byste měli přístup k jakékoli jiné metodě ve spravovaném kódu, jak je uvedeno v následujícím příkladu.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!
    
  • Pokoušíte se zavolat metodu v knihovně DLL modelu COM, jako by se jednalo o knihovnu Windows DLL.You are trying to call a method in a COM DLL as if it were a Windows DLL. Chcete-li získat přístup k knihovně DLL modelu COM, vyberte možnost Přidat odkaz v aplikaci Visual Studio pro přidání odkazu na projekt a pak vyberte knihovnu typů 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.

Seznam počáteční hodnoty vlastností pro instanci EntryPointNotFoundException, najdete v článku EntryPointNotFoundException konstruktory.For a list of initial property values for an instance of EntryPointNotFoundException, see the EntryPointNotFoundException constructors.

Konstruktory

EntryPointNotFoundException() EntryPointNotFoundException() EntryPointNotFoundException() EntryPointNotFoundException()

Inicializuje novou instanci třídy EntryPointNotFoundException třídy.Initializes a new instance of the EntryPointNotFoundException class.

EntryPointNotFoundException(SerializationInfo, StreamingContext) EntryPointNotFoundException(SerializationInfo, StreamingContext) EntryPointNotFoundException(SerializationInfo, StreamingContext) EntryPointNotFoundException(SerializationInfo, StreamingContext)

Inicializuje novou instanci třídy EntryPointNotFoundException třídy se serializovanými daty.Initializes a new instance of the EntryPointNotFoundException class with serialized data.

EntryPointNotFoundException(String) EntryPointNotFoundException(String) EntryPointNotFoundException(String) EntryPointNotFoundException(String)

Inicializuje novou instanci třídy EntryPointNotFoundException třídy pomocí zadané chybové zprávy.Initializes a new instance of the EntryPointNotFoundException class with a specified error message.

EntryPointNotFoundException(String, Exception) EntryPointNotFoundException(String, Exception) EntryPointNotFoundException(String, Exception) EntryPointNotFoundException(String, Exception)

Inicializuje novou instanci třídy EntryPointNotFoundException třídy pomocí zadané chybové zprávy a odkazu na vnitřní výjimku, která je příčinou této výjimky.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.

Vlastnosti

Data Data Data Data

Získá kolekci párů klíč/hodnota, které poskytují další uživatelsky definované informace o výjimce.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
HelpLink HelpLink HelpLink HelpLink

Získá nebo nastaví odkaz na soubor s nápovědě spojený s touto výjimkou.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Získá nebo nastaví hodnotu HRESULT, kódované číselné hodnoty, která je přiřazena konkrétní výjimce.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Exception Získá instanci, která způsobila aktuální výjimku.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

Získá chybovou zprávu pro tuto výjimku.Gets the error message for this exception.

(Inherited from TypeLoadException)
Source Source Source Source

Získá nebo nastaví název aplikace nebo objektu, který způsobuje chybu.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

Načte řetězcovou reprezentaci okamžitých snímků v zásobníku volání.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

Získá metodu, která vyvolá aktuální výjimku.Gets the method that throws the current exception.

(Inherited from Exception)
TypeName TypeName TypeName TypeName

Získá plně kvalifikovaný název typu, který způsobuje výjimku.Gets the fully qualified name of the type that causes the exception.

(Inherited from TypeLoadException)

Metody

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Určuje, zda se zadaný objekt rovná aktuálnímu objektu.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetBaseException() GetBaseException() GetBaseException() GetBaseException()

Při přepsání v odvozené třídě vrátí hodnotu Exception , která je hlavní příčinou jedné nebo více následných výjimek.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Inherited from Exception)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Slouží jako výchozí funkce hash.Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

SerializationInfo Nastaví objekt s názvem třídy, názvem metody, ID prostředku a dalšími informacemi o výjimkách.Sets the SerializationInfo object with the class name, method name, resource ID, and additional exception information.

(Inherited from TypeLoadException)
GetType() GetType() GetType() GetType()

Získá typ modulu runtime aktuální instance.Gets the runtime type of the current instance.

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Vytvoří Mělkou kopii aktuální Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Vytvoří a vrátí řetězcovou reprezentaci aktuální výjimky.Creates and returns a string representation of the current exception.

(Inherited from Exception)

Události

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Nastane, pokud je serializovaná výjimka pro vytvoření objektu stavu výjimky, který obsahuje Serializovaná data o výjimce.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

Platí pro

Viz také