EntryPointNotFoundException 클래스

정의

진입 메서드가 없어서 클래스를 로드하지 못했을 때 throw되는 예외입니다.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
public class EntryPointNotFoundException : TypeLoadException
[System.Serializable]
public 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
특성

설명

EntryPointNotFoundException 예외는 어셈블리의 진입점을 식별할 수 없기 때문에 공용 언어 런타임에서 어셈블리를 로드할 수 없는 경우에 throw 됩니다.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. 다음 조건에서이 예외가 throw 될 수 있습니다.This exception can be thrown under the following conditions:

  • 공용 언어 런타임 애플리케이션 진입점을 찾을 수 없는 (일반적으로 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. 다음 예제에서는 User32.dll에 GetMyNumber라는 함수가 포함 되어 있지 않기 때문에 EntryPointNotFoundException 예외가 throw 됩니다.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. 다음 예제에서는 User32.dll에서 Windows MessageBox 함수를 호출 하려고 시도 하는 방법을 보여 줍니다.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. 두 번째 메서드 정의는 MessageBox 함수 대신 MessageBoxW를 호출 하 여이 문제를 해결 합니다.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++ 코드는 testdll .dll 이라는 라이브러리에서 Double 이라는 함수를 정의 합니다.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;
    }
    

    다음 예제의 코드에서 함수를 호출 하려고 하면 Double 함수를 찾을 수 없기 때문에 EntryPointNotFoundException 예외가 throw 됩니다.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 
    

    Dumpbin.exe와 같은 유틸리티를 사용 하 여 DLL에서 내보내기 함수의 데코레이팅된 이름을 찾을 수 있습니다.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 동적 링크 라이브러리에서 StringUtilities.SayGoodMorning 메서드를 호출 하려고 합니다.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!
    
  • Windows DLL 처럼 COM DLL의 메서드를 호출 하려고 합니다.You are trying to call a method in a COM DLL as if it were a Windows DLL. COM DLL에 액세스 하려면 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

현재 예외를 throw하는 메서드를 가져옵니다.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)

클래스 이름, 메서드 이름, 리소스 ID 및 추가 예외 정보를 사용하여 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

예외에 대한 serialize된 데이터가 들어 있는 예외 상태 개체가 만들어지도록 예외가 serialize될 때 발생합니다.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(다음에서 상속됨 Exception)

적용 대상

추가 정보