如何从dll中导入一个类?

3

mydll.dll

namespace mydll
{
    public class MyClass {
        public static int Add(int x, int y)
        {
            return x +y;
        }
    }
}

在另一个项目中,我如何导入MyClass或仅添加函数?
我想要使用DllImport添加,
[DllImport("mydll.dll", CharSet = CharSet.Auto) ] public static extern .......
我该怎么做?

1
你在应用的两端(类定义和类使用者)都使用了C#吗?如果是这样,可能有更好的方法 - SWeko
3个回答

6

DllImport用于调用非托管代码。您展示的MyClass类是托管代码,为了在另一个程序集中调用它,您只需添加对包含该类的程序集的引用并调用该方法。例如:

using System;
using mydll;

class Program
{
    static void Main()
    {
        int result = MyClass.Add(1, 3);
        Console.WriteLine(result);
    }
}

不,我想在程序运行时添加dll,而不是使用“添加引用”选项,那么我该如何创建一个非托管的dll? - Okan Kocyigit
@ocanal,您可以使用反射和Assembly.LoadFrom方法在运行时加载程序集。一旦程序集被加载,您可以列出其中的所有类型并调用它们的方法。 - Darin Dimitrov

3
您可以使用反射在运行时加载程序集。
以下是一段可供使用的代码:
Assembly myAssembly ;
myAssembly = Assembly.LoadFile("myDll.dll");

object o;
Type myType =  myAssembly.GetType("<assembly>.<class>");
o = Activator.CreateInstance(myType);

您可以在这里找到一份很好的教程。


0

如果两边都是.NET,你仍然需要一些公共接口(或使用动态类型)。如果已经有这样的接口,你可以使用反射或ComponentModel。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接