gpt4 book ai didi

C# 使用 Assembly 调用 DLL 中的方法

转载 作者:太空狗 更新时间:2023-10-30 00:34:43 24 4
gpt4 key购买 nike

我已经阅读了很多关于此的内容 - 我觉得我已经非常接近答案了。我只是想从我创建的 dll 文件中调用一个方法。

例如:

我的 DLL 文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ExampleDLL
{
class Program
{
static void Main(string[] args)
{
System.Windows.Forms.MessageBox.Show(args[0]);
}

public void myVoid(string foo)
{
System.Windows.Forms.MessageBox.Show(foo);
}
}
}


我的应用程序:

string filename = @"C:\Test.dll";
Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom(filename);
// Obtain a reference to a method known to exist in assembly.
MethodInfo Method = SampleAssembly.GetTypes()[0].GetMethod("myVoid");
// Obtain a reference to the parameters collection of the MethodInfo instance.

上述片段的所有功劳都归功于 SO 用户 'woohoo' How to call a Managed DLL File in C#?

不过,现在我不仅希望能够引用我的 Dll(以及其中的方法),而且能够正确调用其中的方法(在这种情况下,我想调用方法“myVoid”)。

有人可以给我一些建议吗?

谢谢,

埃文

最佳答案

您引用的问题和答案是使用反射调用托管 DLL 中的方法。如果正如您所说的那样,您只是引用您的 DLL,那么这不是必需的。添加引用(通过 Visual Studio 中的“添加引用”选项),您可以像这样直接调用您的方法:

ExampleDLL.Program p = new ExampleDLL.Program(); // get an instance of `Program`
p.myVoid(); // call the method `myVoid`

如果你想走反射路线(如 woohoo 给出的那样),你仍然需要一个 Program 类的实例。

Assembly SampleAssembly = Assembly.LoadFrom(filename);
Type myType = SampleAssembly.GetTypes()[0];
MethodInfo Method = myType.GetMethod("myVoid");
object myInstance = Activator.CreateInstance(myType);
Method.Invoke(myInstance, null);

现在你有一个Program的实例并且可以调用myVoid

关于C# 使用 Assembly 调用 DLL 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891752/

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