2014-06-06 50 views
0

所以我創造了這個dll文件,我想調用的方法動態C#動態調用DLL的GetType

命名空間getDirInf {

public static class fileInf 
{ 

    public static long FileSizeRecursive(string strDirectory, long p_lnDirLength) 
    { 

     DirectoryInfo _dinf = new DirectoryInfo(strDirectory); 
     DirectoryInfo[] _dirs = _dinf.GetDirectories(); 

     long _lnDirSize = p_lnDirLength; 

     _lnDirSize += GetFileSize(strDirectory); 

     if (_dirs.Length == 0) 
     { 
      return _lnDirSize; 
     } 
     else 
     { 
      foreach (DirectoryInfo dir in _dirs) 
      { 
       _lnDirSize = FileSizeRecursive(dir.FullName, _lnDirSize); 
      } 
      return _lnDirSize; 
     } 

    } 

    public static long GetFileSize(string strDirectory) 
    { 

     long _lnDirSize = 0; 
     DirectoryInfo _dinf = new DirectoryInfo(strDirectory); 
     FileInfo[] dirFiles = _dinf.GetFiles(); 


     foreach (FileInfo fi in dirFiles) 
     { 
      _lnDirSize += fi.Length; 
     } 

     return _lnDirSize; 

    } 

} 

}

和多數民衆的功能我」 m使用調用dll中的方法,這是構造函數

public ThreadCall(string _path, TextBox txtSize) 
    { 
     this._path = _path; 
     this.txtSize = txtSize; 
     Assembly assembly = Assembly.LoadFile("C:\\...\\getDirInf.dll"); 
     var type = assembly.GetType("getDirInf.fileInf"); 

     MethodInfo method = type.GetMethod("FileSizeRecursive", BindingFlags.Public | BindingFlags.Static); 
    } 

An d這是函數調用。

 public void callThread() 
    { 
     k = method.Invoke(null, new object[] { _path, 0L }); //this is where i'm having problems 
    } 

由於在DLL中的方法都是靜態的,我試圖打電話method.Invoke用null作爲第一個參數,功能作爲第二個參數。我想,當該方法是靜態的,你不需要調用一個實例,將與空工作,但現在我有這個代碼空引用異常......

如何解決這個就任何幫助不勝感激,謝謝。

+0

設置一些斷點在'ThreadCall'和'callThread'方法,開始在調試器中的應用,並通過代碼。對於所採取的每個步驟,請查看觀察窗口中的變量或將它們懸停在其上。他們是你期望他們是什麼? – Dirk

+0

使用Stacktrace發送異常詳細信息。 –

+1

您確定使用了正確的「方法」對象嗎?在構造函數中,是一個局部變量,在函數這似乎是該實例的成員變量... –

回答

-1

這應有助於:

Assembly assembly = Assembly.LoadFile("C:\\...\\getDirInf.dll"); 
//var type = Type.GetType("getDirInf.fileInf"); 
var type = assembly.GetType("getDirInf.fileInf"); 

調用Invoke(null, ...)是一個靜態方法正確。

+0

謝謝,對於回調,但不幸的是問題依然存在。 – user3423295