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共通言語ランタイムがアセンブリのエントリ ポイントを識別できないため、アセンブリを読み込むにはできない場合、例外がスローされます。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:

  • 共通言語ランタイムはアプリケーションのエントリ ポイントを特定できません (通常、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. アプリケーション アセンブリには、1 つ以上のエントリ ポイントを定義できません。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メソッドの呼び出しで使用される名前は、呼び出されたメソッドの 1 つまたは複数の文字列パラメーターが含まれています、ANSI と Unicode のバージョンの両方がありますこの 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 の呼び出しを試みるする示しますMessageBoxUser32.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. 2 番目のメソッド定義は、呼び出すことによってこの問題を修正、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 
    

    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.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!
    
  • 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() 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()

派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の主要な原因である 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 オブジェクトに、クラス名、メソッド名、リソース ID、および追加例外情報を設定します。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)

適用対象

こちらもご覧ください