EntryPointNotFoundException Класс

Определение

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

Комментарии

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.

  • Не удается разрешить вызов функции в библиотеке DLL Windows, так как не удается найти функцию.The call to a function in a Windows DLL cannot be resolved because the function cannot be found. В следующем примере создается EntryPointNotFoundException исключение, поскольку user32. dll не включает функцию с именем. 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'.
    
  • Не удается разрешить вызов функции в библиотеке DLL Windows, так как имя, используемое в вызове метода, не совпадает с именем, найденным в сборке.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 или 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. В следующем примере показана попытка вызвать функцию 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 в библиотеке с именем тестдлл. 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. Чтобы увидеть это в действии, скомпилируйте следующий пример в сборку с именем Стрингутилитиес. 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 метод в библиотеке динамической компоновки стрингутилитиес. 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.Initializes a new instance of the EntryPointNotFoundException class.

EntryPointNotFoundException(SerializationInfo, StreamingContext)

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

EntryPointNotFoundException(String)

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

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

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

(Унаследовано от Exception)
HelpLink

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

(Унаследовано от Exception)
HResult

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

(Унаследовано от Exception)
InnerException

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

(Унаследовано от Exception)
Message

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

(Унаследовано от TypeLoadException)
Source

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

(Унаследовано от Exception)
StackTrace

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

(Унаследовано от Exception)
TargetSite

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

(Унаследовано от Exception)
TypeName

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

(Унаследовано от TypeLoadException)

Методы

Equals(Object)

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

(Унаследовано от Object)
GetBaseException()

При переопределении в производном классе возвращает исключение Exception, которое является корневой причиной одного или нескольких последующих исключений.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Унаследовано от Exception)
GetHashCode()

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

(Унаследовано от Object)
GetObjectData(SerializationInfo, StreamingContext)

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

(Унаследовано от TypeLoadException)
GetType()

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

(Унаследовано от Exception)
MemberwiseClone()

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

(Унаследовано от Object)
ToString()

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

(Унаследовано от Exception)

События

SerializeObjectState

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

(Унаследовано от Exception)

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

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