EntryPointNotFoundException EntryPointNotFoundException EntryPointNotFoundException EntryPointNotFoundException Class

Определение

Исключение, выбрасываемое, когда попытка загрузки класса завершается неудачей из-за отсутствия метода входа.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
Наследование
Атрибуты

Комментарии

EntryPointNotFoundException Исключение вызывается, когда среда CLR не удается загрузить сборку, так как он не может идентифицировать точку входа сборки.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. Это исключение может возникнуть при следующих условиях:This exception can be thrown under the following conditions:

  • Среда CLR не сможет найти точку входа приложения (обычно Main метод) в исполняемую сборку.The common language runtime is unable to locate an application entry point (typically a Main method) in an executable assembly. Точка входа приложения должны быть глобальными или static метод, который имеет без параметров или массив строк в качестве единственного параметра.The application entry point must be a global or static method that has either no parameters or a string array as its only parameter. Точка входа может возвращать void, или он может возвращать Int32 или UInt32 код выхода.The entry point can return void, or it can return an Int32 or UInt32 exit code. Сборка приложения невозможно определить более одной точки входа.An application assembly cannot define more than one entry point.

  • Вызов функции в Windows DLL не удается разрешить, поскольку не удалось найти функцию.The call to a function in a Windows DLL cannot be resolved because the function cannot be found. В следующем примере EntryPointNotFoundException возникает исключение, поскольку User32.dll отсутствует функция с именем 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'.
    
  • Не удается разрешить вызов функции в Windows DLL, так как имя, используемое в вызове метода не соответствует имени, найденные в сборке.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. Часто это происходит потому, что DllImportAttribute.ExactSpelling поля неявно или явно задается true, вызванный метод содержит один или несколько параметров строки и ANSI и Юникод и не делает имя, используемое в вызове метода соответствовать имени этой версии ANSI или Юникод.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. Следующий пример иллюстрирует при попытке вызвать Windows MessageBox функция в библиотеке User32.dll.The following example provides an illustration by attempting to call the Windows MessageBox function in User32.dll. Так как в первом определении метода задается CharSet.Unicode для маршалинга строк, общий язык ищет широкосимвольную версию функции, MessageBoxW, а не имя, используемое в вызове метода, 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. Второе определение метода решает эту проблему путем вызова MessageBoxW вместо 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
    
  • Вы пытаетесь вызвать функцию в библиотеке динамической компоновки, его простое имя, а не ее внутреннее имя.You are trying to call a function in a dynamic link library by its simple name rather than its decorated name. Как правило компилятор C++ создает декорированного имени для функций DLL.Typically, the C++ compiler generates a decorated name for DLL functions. Например, следующий код C++ определяет функцию с именем Double в библиотеке с именем 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;
    }
    

    Если в коде в следующем примере предпринимается попытка вызова функции, EntryPointNotFoundException создано исключение, поскольку 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()
    

    Тем не менее если функция вызывается с помощью его декорированное имя (в этом случае ?Double@@YAHH@Z), вызов функции завершается успешно, как показано в следующем примере.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 
    

    Вы найдете декорированных имен функций, экспортируемых посредством библиотеки DLL с помощью программы, такие как Dumpbin.exe.You can find the decorated names of functions exported by a DLL by using a utility such as Dumpbin.exe.

  • Вы пытаетесь вызвать метод в управляемую сборку, как если бы он был неуправляемых библиотек.You are attempting to call a method in a managed assembly as if it were an unmanaged dynamic link library. Чтобы увидеть это в действии, скомпилируйте следующий пример в сборку с именем 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
    

    Затем скомпилируйте и выполните в следующем примере, который пытается вызвать StringUtilities.SayGoodMorning метод в библиотеке динамической компоновки StringUtilities.dll как будто неуправляемого кода.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. В результате 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()
    

    Чтобы устранить исключение, добавьте ссылку на управляемую сборку и доступа StringUtilities.SayGoodMorning метод точно так же, как и к любой другой метод в управляемом коде, как показано в следующем примере.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!
    
  • Вы пытаетесь вызвать метод в библиотеке DLL COM, как если бы оно было библиотеки DLL Windows.You are trying to call a method in a COM DLL as if it were a Windows DLL. Чтобы получить доступ к DLL-Библиотеку COM, выберите добавить ссылку в Visual Studio, чтобы добавить ссылку на проект, а затем выберите библиотеку типов из 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.

Список начальных значений свойств для экземпляра EntryPointNotFoundException, см. в разделе EntryPointNotFoundException конструкторы.For a list of initial property values for an instance of EntryPointNotFoundException, see the EntryPointNotFoundException constructors.

Конструкторы

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

Инициализирует новый экземпляр класса EntryPointNotFoundException.Initializes a new instance of the EntryPointNotFoundException class.

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

Инициализирует новый экземпляр класса EntryPointNotFoundException с сериализованными данными.Initializes a new instance of the EntryPointNotFoundException class with serialized data.

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

Инициализирует новый экземпляр класса EntryPointNotFoundException с указанным сообщением об ошибке.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)

Инициализирует новый экземпляр класса EntryPointNotFoundException указанным сообщением об ошибке и ссылкой на внутреннее исключение, вызвавшее данное исключение.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.

Свойства

Data Data Data Data

Возвращает коллекцию пар "ключ-значение", предоставляющих дополнительную заданную пользователем информацию об исключении.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
HelpLink HelpLink HelpLink HelpLink

Возвращает или задает ссылку на файл справки, связанный с этим исключением.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Возвращает экземпляр объекта Exception, который вызвал текущее исключение.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

Возвращает сообщение об ошибке для данного исключения.Gets the error message for this exception.

(Inherited from TypeLoadException)
Source Source Source Source

Возвращает или задает имя приложения или объекта, вызывавшего ошибку.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

Получает строковое представление непосредственных кадров в стеке вызова.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

Возвращает метод, создавший текущее исключение.Gets the method that throws the current exception.

(Inherited from Exception)
TypeName TypeName TypeName TypeName

Возвращает полное имя типа, вызывающего исключение.Gets the fully qualified name of the type that causes the exception.

(Inherited from TypeLoadException)

Методы

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

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

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

При переопределении в производном классе возвращает исключение Exception, которое является корневой причиной одного или нескольких последующих исключений.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()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

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

Задает имя класса, имя метода, идентификатор ресурса и дополнительные сведения об исключении для объекта SerializationInfo.Sets the SerializationInfo object with the class name, method name, resource ID, and additional exception information.

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

Возвращает тип текущего экземпляра в среде выполнения.Gets the runtime type of the current instance.

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Создает и возвращает строковое представление текущего исключения.Creates and returns a string representation of the current exception.

(Inherited from Exception)

События

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

Применяется к

Дополнительно