EntryPointNotFoundException クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
開始メソッドが指定されていないことが原因でクラスの読み込みに失敗した場合にスローされる例外。
public ref class EntryPointNotFoundException : TypeLoadException
public class EntryPointNotFoundException : TypeLoadException
[System.Serializable]
public class EntryPointNotFoundException : TypeLoadException
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class EntryPointNotFoundException : TypeLoadException
type EntryPointNotFoundException = class
inherit TypeLoadException
[<System.Serializable>]
type EntryPointNotFoundException = class
inherit TypeLoadException
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type EntryPointNotFoundException = class
inherit TypeLoadException
Public Class EntryPointNotFoundException
Inherits TypeLoadException
- 継承
- 属性
注釈
EntryPointNotFoundException共通言語ランタイムがアセンブリのエントリ ポイントを識別できないため、アセンブリを読み込むことができない場合、例外がスローされます。 この例外は、次の条件でスローできます。
共通言語ランタイムは、実行可能アセンブリ内のアプリケーション エントリ ポイント (通常は
Main
メソッド) を見つけることができません。 アプリケーション エントリ ポイントは、パラメーターを持たないグローバルメソッドまたはstatic
メソッド、または唯一のパラメーターとして文字列配列を持つメソッドである必要があります。 エントリ ポイントは を返void
すか、 または UInt32 終了コードをInt32返すことができます。 アプリケーション アセンブリは、複数のエントリ ポイントを定義できません。関数が見つからないため、Windows DLL 内の関数の呼び出しを解決できません。 次の例では、 EntryPointNotFoundException User32.dll に という名前
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'.
open System open System.Runtime.InteropServices [<DllImport "user32.dll">] extern int GetMyNumber() try let number = GetMyNumber() () with :? EntryPointNotFoundException as e -> printfn $"{e.GetType().Name}:\n {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 内の関数の呼び出しを解決できません。 フィールドが暗黙的または明示的に に
true
設定されDllImportAttribute.ExactSpelling、呼び出されたメソッドに 1 つ以上の文字列パラメーターが含まれており、ANSI と Unicode の両方のバージョンがあり、メソッド呼び出しで使用される名前がこの ANSI または Unicode バージョンの名前に対応していないために、この問題が発生する場合がよく発生します。 次の例では、User32.dllで WindowsMessageBox
関数を呼び出そうとする方法を示します。 最初のメソッド定義では文字列マーシャリングが指定CharSet.Unicodeされているため、共通言語は、メソッド呼び出しMessageBox
で使用される名前ではなく、MessageBoxW
関数のワイド文字バージョン を検索します。 2 番目のメソッド定義では、 関数の代わりに をMessageBoxW
呼び出すことで、この問題をMessageBox
修正します。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); } } }
open System open System.Runtime.InteropServices [<DllImport("user32.dll", CharSet = CharSet.Unicode, ExactSpelling = true )>] extern int MessageBox(IntPtr hwnd, String text, String caption, uint ``type``) [<DllImport("user32.dll", CharSet = CharSet.Unicode, ExactSpelling = true )>] extern int MessageBoxW(IntPtr hwnd, String text, String caption, uint ``type``) try MessageBox(IntPtr 0, "Calling the MessageBox Function", "Example", 0u) |> ignore with :? EntryPointNotFoundException as e -> printfn $"{e.GetType().Name}:\n {e.Message}" try MessageBoxW(IntPtr 0, "Calling the MessageBox Function", "Example", 0u) |> ignore with :? EntryPointNotFoundException as e -> printfn $"{e.GetType().Name}:\n {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
ダイナミック リンク ライブラリ内の関数を、修飾名ではなく単純な名前で呼び出そうとしています。 通常、C++ コンパイラは DLL 関数の修飾名を生成します。 たとえば、次の C++ コードでは、TestDll.dll という名前
Double
のライブラリで という名前の関数を定義しています。__declspec(dllexport) int Double(int number) { return number * 2; }
次の例のコードで関数を呼び出そうとすると、 EntryPointNotFoundException 関数が見つからないため、例外が
Double
スローされます。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()
open System open System.Runtime.InteropServices [<DllImport "TestDll.dll">] extern int Double(int number) printfn $"{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
関数が修飾名 (この場合は ) を使用して呼び出された場合、関数の呼び出しは成功します。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
open System open System.Runtime.InteropServices [<DllImport("TestDll.dll", EntryPoint = "?Double@@YAHH@Z")>] extern int Double(int number) printfn $"{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などのユーティリティを使用して見つけることができます。
アンマネージド ダイナミック リンク ライブラリであるかのように、マネージド アセンブリ内のメソッドを呼び出そうとしています。 この動作を確認するには、次の例を 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 let SayGoodMorning name = $"A top of the morning to you, %s{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
そうとします。 結果は例外です EntryPointNotFoundException 。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()
open System open System.Runtime.InteropServices [<DllImport("StringUtilities.dll", CharSet = CharSet.Unicode )>] extern String SayGoodMorning(String name) printfn $"""{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
同じように メソッドにアクセスします。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!
printfn $"""{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 内のメソッドを呼び出そうとしています。 COM DLL にアクセスするには、Visual Studio の [ 参照の追加] オプションを選択してプロジェクトへの参照を追加し、[ COM ] タブからタイプ ライブラリを選択します。
インスタンスの初期プロパティ値の一覧についてはEntryPointNotFoundExceptionを参照してください、EntryPointNotFoundExceptionコンス トラクター。
コンストラクター
EntryPointNotFoundException() |
EntryPointNotFoundException クラスの新しいインスタンスを初期化します。 |
EntryPointNotFoundException(SerializationInfo, StreamingContext) |
古い.
シリアル化したデータを使用して、EntryPointNotFoundException クラスの新しいインスタンスを初期化します。 |
EntryPointNotFoundException(String) |
指定したエラー メッセージを使用して、EntryPointNotFoundException クラスの新しいインスタンスを初期化します。 |
EntryPointNotFoundException(String, Exception) |
指定したエラー メッセージおよびこの例外の原因となった内部例外への参照を使用して、EntryPointNotFoundException クラスの新しいインスタンスを初期化します。 |
プロパティ
Data |
例外に関する追加のユーザー定義情報を提供する、キーと値のペアのコレクションを取得します。 (継承元 Exception) |
HelpLink |
この例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。 (継承元 Exception) |
HResult |
特定の例外に割り当てられているコード化数値である HRESULT を取得または設定します。 (継承元 Exception) |
InnerException |
現在の例外の原因となる Exception インスタンスを取得します。 (継承元 Exception) |
Message |
この例外のエラー メッセージを取得します。 (継承元 TypeLoadException) |
Source |
エラーの原因となるアプリケーションまたはオブジェクトの名前を取得または設定します。 (継承元 Exception) |
StackTrace |
呼び出し履歴で直前のフレームの文字列形式を取得します。 (継承元 Exception) |
TargetSite |
現在の例外がスローされたメソッドを取得します。 (継承元 Exception) |
TypeName |
例外を引き起こす型の完全修飾名を取得します。 (継承元 TypeLoadException) |
メソッド
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetBaseException() |
派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の根本原因である Exception を返します。 (継承元 Exception) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetObjectData(SerializationInfo, StreamingContext) |
古い.
クラス名、メソッド名、リソース ID、追加の例外情報を使用して SerializationInfo オブジェクトを設定します。 (継承元 TypeLoadException) |
GetType() |
現在のインスタンスのランタイム型を取得します。 (継承元 Exception) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
ToString() |
現在の例外の文字列形式を作成して返します。 (継承元 Exception) |
イベント
SerializeObjectState |
古い.
例外がシリアル化され、例外に関するシリアル化されたデータを含む例外状態オブジェクトが作成されたときに発生します。 (継承元 Exception) |
適用対象
こちらもご覧ください
.NET