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作爲第一個參數,功能作爲第二個參數。我想,當該方法是靜態的,你不需要調用一個實例,將與空工作,但現在我有這個代碼空引用異常......
如何解決這個就任何幫助不勝感激,謝謝。
設置一些斷點在'ThreadCall'和'callThread'方法,開始在調試器中的應用,並通過代碼。對於所採取的每個步驟,請查看觀察窗口中的變量或將它們懸停在其上。他們是你期望他們是什麼? – Dirk
使用Stacktrace發送異常詳細信息。 –
您確定使用了正確的「方法」對象嗎?在構造函數中,是一個局部變量,在函數這似乎是該實例的成員變量... –