gpt4 book ai didi

c# - 枚举 DLL 函数?

转载 作者:行者123 更新时间:2023-11-30 20:14:08 25 4
gpt4 key购买 nike

是否可以枚举 DLL 中存在的每个函数?得到它的签名怎么样?我可以在 C# 中执行此操作吗?还是我必须降低级别才能执行此操作?

问候和感谢,何塞

最佳答案

如果是 .NET DLL RedGate's Reflector可以列出方法,甚至可以尝试反汇编代码。对于任何开发人员的工具箱来说,它都是一个很棒的项目,而且是免费的

编辑:如果您尝试在运行时读取类型和方法,您需要使用反射。您必须加载 AssemblyGetExportedTypes。然后,遍历 MembersMethodsProperties。这是一篇来自 MSDN 的文章,其中有一个迭代 MemberInfo 的示例信息。此外,这是一篇 MSDN 杂志文章,Extracting Data from .NET Assemblies .

最后,这是我为在加载的对象上执行方法而编写的一个小测试方法。

在这个例子中,ClassLibrary1 有一个类 Class1:

public class Class1
{
public bool WasWorkDone { get; set; }

public void DoWork()
{
WasWorkDone = true;
}
}

这是测试:

[TestMethod]
public void CanExecute_On_LoadedClass1()
{
// Load Assembly and Types
var assm = Assembly.LoadFile(@"C:\Lib\ClassLibrary1.dll");
var types = assm.GetExportedTypes();

// Get object type informaiton
var class1 = types.FirstOrDefault(t => t.Name == "Class1");
Assert.IsNotNull(class1);

var wasWorkDone = class1.GetProperty("WasWorkDone");
Assert.IsNotNull(wasWorkDone);

var doWork = class1.GetMethod("DoWork");
Assert.IsNotNull(doWork);

// Create Object
var class1Instance = Activator.CreateInstance(class1.UnderlyingSystemType);

// Do Work
bool wasDoneBeforeInvoking =
(bool)wasWorkDone.GetValue(class1Instance, null);
doWork.Invoke(class1Instance, null);
bool wasDoneAfterInvoking =
(bool)wasWorkDone.GetValue(class1Instance, null);

// Assert
Assert.IsFalse(wasDoneBeforeInvoking);
Assert.IsTrue(wasDoneAfterInvoking);
}

关于c# - 枚举 DLL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/873078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com