2016-08-06 16 views
1

現在、私はCバインディングを学んでいます。私はテストのために以下を書いたが、MissingMethodExceptionを生成する。カスタムプライベートDLLを読み込み、メソッドを正常に呼び出すと、GAC DLLで同じことを試みましたが、失敗しました。Late binding MissingMethodException

私は次のコードが悪いのか分からない:

//Load the assembly 
Assembly dll = Assembly.Load(@"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 "); 

//Get the MessageBox type 
Type msBox = dll.GetType("System.Windows.Forms.MessageBox"); 

//Make an instance of it 
object msb = Activator.CreateInstance(msBox); 

//Finally invoke the Show method 
msBox.GetMethod("Show").Invoke(msb, new object[] { "Hi", "Message" }); 
+0

を'MessageBox'クラスはパブリックコンストラクタを持たず、静的メソッドを介して使用されることになっています。 –

答えて

2

あなたはこのラインでMissingMethodExceptionを得ている:

object msb = Activator.CreateInstance(msBox); 

MessageBoxクラスにはpublicコンストラクタがありませんので。このクラスは、このようにその静的メソッドを使用して使用することを想定している。

MessageBox.Show("Hi", "Message"); 

反射によって静的メソッドを呼び出すには、このようなInvokeメソッドの最初のパラメータとしてnullを渡すことができます。

//Load the assembly 
Assembly dll = 
    Assembly.Load(
     @"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 "); 

//Get the MessageBox type 
Type msBox = dll.GetType("System.Windows.Forms.MessageBox"); 

//Finally invoke the Show method 
msBox 
    .GetMethod(
     "Show", 
     //We need to find the method that takes two string parameters 
     new [] {typeof(string), typeof(string)}) 
    .Invoke(
     null, //For static methods 
     new object[] { "Hi", "Message" }); 
関連する問題