所以我创建了这个dll文件,我试图动态调用这些方法
命名空间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;
}
}
}
那就是我用来调用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);
}
这是函数调用。
public void callThread()
{
k = method.Invoke(null, new object[] { _path, 0L }); //this is where i'm having problems
}
由于dll中的方法都是静态的,我试图调用method.Invoke,其中null为第一个参数,第二个是函数的参数。我认为当方法是静态的时,你不需要在调用中使用一个实例,它可以使用null但是现在我使用这个代码有空引用异常......
感谢您提供有关如何解决此问题的任何帮助。
答案 0 :(得分:-1)
这应该有所帮助:
Assembly assembly = Assembly.LoadFile("C:\\...\\getDirInf.dll");
//var type = Type.GetType("getDirInf.fileInf");
var type = assembly.GetType("getDirInf.fileInf");
调用Invoke(null, ...)
对于静态方法是正确的。