从DLL获取程序的程序集
本文关键字:程序集 程序 获取 DLL | 更新日期: 2023-09-27 18:29:13
我想访问一个附加DLL的程序的函数。
在DLL中我尝试过:
Assembly assembly = Assembly.GetExecutingAssembly();
Type type = assembly.GetType("Uranium");
MethodInfo methodInfo = type.GetMethod("Util");
methodInfo.Invoke("SendClient", new object[] { Packet.GetData()});
但不起作用我得到一个空异常,但不说行。正在运行的程序被调用,命名空间为"Uranium",类为"Util",函数为"SendClient"。
我已经能够自己解决它了。
代码:
Assembly assembly = Assembly.LoadFrom("Uranium.exe");
Type type = assembly.GetType("Uranium.Util");
MethodInfo methodInfo = type.GetMethod("SendClient");
methodInfo.Invoke(null, new object[] { Packet.GetData() });
从您发布的代码中可以看出,您试图调用类铀的函数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
代替。当然,您应该添加GetType
和GetMethod
返回值不是null
的检查
您首先需要找到包含该类型的程序集。此外,您需要将类名传递给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()});
}
}