次の方法で共有


ModuleResolveEventHandler デリゲート

AssemblyModuleResolve イベントを処理するメソッドを表します。

<Serializable>
Public Delegate Function Sub ModuleResolveEventHandler( _   ByVal sender As Object, _   ByVal e As ResolveEventArgs _) As Module
[C#]
[Serializable]
public delegate Module ModuleResolveEventHandler(   object sender,   ResolveEventArgs e);
[C++]
[Serializable]
public __gc __delegate Module* ModuleResolveEventHandler(   Object* sender,   ResolveEventArgs* e);

[JScript] JScript では、.NET Framework のデリゲートを利用することができます。ただし、独自に定義することはできません。

パラメータ [Visual Basic, C#, C++]

作成するイベント ハンドラは、ModuleResolveEventHandler クラスのデリゲート定義と同一のパラメータを持つ必要があります。

  • sender
    イベントのソースであるアセンブリ。
  • e
    イベントを記述しているオブジェクトによって提供されている引数。

解説

Assembly デリゲートを作成する場合は、イベントを処理するメソッドを指定します。イベントをイベント ハンドラに関連付けるには、デリゲートのインスタンスをイベントに追加します。デリゲートを削除しない限り、そのイベントが発生すると常にイベント ハンドラが呼び出されます。イベント ハンドラ デリゲートの詳細については、「 イベントとデリゲート 」を参照してください。

共通言語ランタイム クラス ローダーが通常の方法でアセンブリの内部モジュールへの参照を解決できない場合は、コールバックによってモジュール自体を検索したり読み込んで返すことができるように、イベントが発生します。

Delegate および MulticastDelegate の各派生クラスには、コンストラクタと Invoke メソッドがあります Delegate の説明で示した C++ マネージ拡張コード例を参照してください。

使用例

[C#] イベント ハンドラが呼び出されたときの処理順序を示す例を次に示します。この例では、Server1 は MySample クラスの外部モジュールです。

[C#] この例を次の手順に従ってコンパイルし、実行してください。

  1. Server1 をコンパイルします。
  2. MySample をコンパイルします。
  3. MySample を実行します。モジュール ファイル Server1.netmodule は、"subfolder" という名前のサブフォルダにあることが条件です。この条件が満たされない場合、この例は機能しません。

[C#] Server1 を次のようにコンパイルします。

[C#] csc /out:subfolder\Server1.netmodule /t:module Server1.cs

 
using System;
using System.Reflection;
public class Server1 : MarshalByRefObject 
{
    public int trivial()
    {
        Console.WriteLine ("server1.trivial");
        return 1;
    }
}

[C#] MySample を次のようにコンパイルします。

[C#] csc /out:MySample.exe /t:exe /addmodule:subfolder\Server1.netmodule MySample.cs

 
using System;
using System.IO;
using System.Reflection;
class MySample
{
    public static int Main(String[] args)
    {
        Assembly asm1 = Assembly.GetExecutingAssembly();
        asm1.ModuleResolve += new ModuleResolveEventHandler (evModuleResolve);
        Console.WriteLine("Calling MySample.Test");
        Test();
        return 0;
    }
    private static Module evModuleResolve(object sender, ResolveEventArgs e)
    {
        Console.WriteLine("MySample.evModuleResolve");
        FileStream fs = File.Open(".\\subfolder\\server1.netmodule", FileMode.Open);
        byte [] rgFileBytes = new byte [1];
        long len = fs.Length;
        rgFileBytes = new byte[len];
        fs.Read(rgFileBytes, 0, (int)len);
        Assembly a = Assembly.GetExecutingAssembly();
        Module m = a.LoadModule("server1.netmodule", rgFileBytes);
        
        return m;
    }
    private static void Test()
    {
        Console.WriteLine("Instantiating Server1");
        Server1 s = new Server1();
        Console.WriteLine("Calling Server1.trivial");
        s.trivial();
    }    
}

[Visual Basic, C++, JScript] Visual Basic、C++、および JScript のサンプルはありません。C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Reflection

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

System.Reflection 名前空間