2012-05-16 29 views
0

我想裝載組件(dll-test.dll),並運行方法GetLabel裝載組件和運行方法

namespace Dlltest.Test 
{ 
    public class Main 
    { 
     public string GetLabel() 
     { 
      string test = "TestString"; 
      return test; 
     } 
    } 
} 

我有下面的代碼,但是我不能去跑GetLabel

Assembly assembly = Assembly.LoadFile(@"C:\dll-test.dll"); 
Type type = assembly.GetType(); 
var obj = Activator.CreateInstance(type); 

var result = type.InvokeMember("GetLabel", 
           BindingFlags.Default | BindingFlags.InvokeMethod, 
           null, 
           obj, 
           null); 

MessageBox.Show(result.ToString); 

它應該顯示一個消息框TestString

編輯

我最終取得了它的工作:

Assembly assembly = Assembly.LoadFile(@"C:\dll-test.dll"); 
var type = assembly.GetTypes(); 
var obj = Activator.CreateInstance(type[0]); 

var result = type[0].InvokeMember("GetLabel", 
          BindingFlags.Default | BindingFlags.InvokeMethod, 
          null, 
          obj, 
          null); 

MessageBox.Show(result.ToString()); 
+0

將創建System.Reflection.Assembly的實例,並調用它的GetGabel方法... –

+0

GetGabel!= GetLabel – msmucker0527

回答

3

在行

Type type = assembly.GetType(); 

你想要的類型分配assembly變量的類型來代替。試試assembly.GetType(type_name)。此外變 「GetGabel」 到 「GetLabel」 :)

+0

的Visual Studio提供了我這個錯誤:'參數1:不能從'方法組'轉換爲'字符串'的消息框。 – Devator

+0

你忘了'result.ToString()':)中的括號 – Wojteq

+0

啊謝謝!我還編輯了我的主要帖子(完整的工作代碼)。 – Devator

2

嘗試

Type type = assembly.GetType("MyType"); 
if(temp == null) throw new InvalidOperationException(); 
//... 
+0

Visual Studio給了我這個錯誤:'參數1:不能從'方法組'轉換爲'string'作爲messagebox。 – Devator

+0

使用'MessageBox.Show(result.ToString())'(需要調用該方法,不傳遞它的「引用」 –