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
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 例外は、アセンブリのエントリポイントを識別できないために、共通言語ランタイムがアセンブリを読み込むことができない場合にスローされます。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. アプリケーションアセンブリで複数のエントリポイントを定義することはできません。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 例外がスローされます。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. 次の例では、User32.dll で Windows MessageBox 関数を呼び出そうとしています。The following example provides an illustration by attempting to call the Windows MessageBox function in User32.dll. 最初のメソッド定義では文字列のマーシャリングに CharSet.Unicode が指定されているため、共通言語では、メソッドの MessageBox呼び出しで使用されている名前ではなく、関数のワイド文字バージョンの MessageBoxWが検索されます。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番目のメソッド定義では、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 例外がスローされます。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 などのユーティリティを使用して、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 という名前のアセンブリにコンパイルします。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 dll ダイナミックリンクライブラリ内の 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!
    
  • COM DLL 内のメソッドを、Windows 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

現在の例外がスローされたメソッドを取得します。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()

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

適用対象

こちらもご覧ください