C#动态dll调用gettype

时间:2014-06-06 08:47:39

标签: c# dll methods invoke gettype

所以我创建了这个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但是现在我使用这个代码有空引用异常......

感谢您提供有关如何解决此问题的任何帮助。

1 个答案:

答案 0 :(得分:-1)

这应该有所帮助:

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

调用Invoke(null, ...)对于静态方法是正确的。