从DLL获取程序的汇编

时间:2013-08-28 08:52:19

标签: c# .net dll .net-assembly methodinfo

我想访问附加了DLL的程序的函数。

在DLL中我尝试过:

Assembly assembly = Assembly.GetExecutingAssembly();
Type type = assembly.GetType("Uranium");
MethodInfo methodInfo = type.GetMethod("Util");

methodInfo.Invoke("SendClient", new object[] { Packet.GetData()});

但不行,我得到一个null异常,但不说该行。 调用正在运行的程序,名称空间为'Uranium',类为'Util',函数为'SendClient'。

3 个答案:

答案 0 :(得分:3)

我已经能够自己解决它。

代码:

Assembly assembly = Assembly.LoadFrom("Uranium.exe");
Type type = assembly.GetType("Uranium.Util");
MethodInfo methodInfo = type.GetMethod("SendClient");

methodInfo.Invoke(null, new object[] { Packet.GetData() });

答案 1 :(得分:0)

首先需要找到包含该类型的程序集。此外,您需要将类名称传递给GetType(),而不是名称空间,方法名称传递给GetMethod(),而不是类名。

foreach (Assembly currentassembly in AppDomain.CurrentDomain.GetAssemblies()) 
{
    Type t = currentassembly.GetType("Util", false, true);
    if (t != null) 
    {
        MethodInfo methodInfo = type.GetMethod("SendClient");
        methodInfo.Invoke(Activator.CreateInstance(t),new object[] { Packet.GetData()});
    }
}

答案 2 :(得分:0)

从我发布的代码中我可以看到,你尝试调用类Uranium的Util函数。而你传递一个字符串作为类的实例。

这应该更像你正在尝试做的事情:

Assembly assembly = Assembly.GetExecutingAssembly();
Type type = assembly.GetType("Util");
MethodInfo methodInfo = type.GetMethod("SendClient");

methodInfo.Invoke(Activator.CreateInstance(type), new object[] { Packet.GetData()});

如果SendClient是静态成员函数,则Activator.CreateInstance(type)可以替换为null。 当然,您应该添加GetTypeGetMethod返回值不是null的检查