2011-04-19 59 views
1

MYDLL.DLL如何从dll导入类?

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

在另一个项目中如何导入MyClass的,或只是附加功能?

我想与的DllImport增加,

函数[DllImport( “MYDLL.DLL”,字符集= CharSet.Auto)]公共静态外部 .......

我该怎么做?

+1

您是否在应用程序的两端(类定义和类使用者)上使用C#?如果你是,可能有[更好的方法](http://msdn.microsoft.com/en-us/library/7314433t(v = VS.90).aspx) – SWeko 2011-04-19 08:30:01

回答

1

您可以使用反射在运行时加载程序集。

下面的一段代码,你可以使用:

Assembly myAssembly ; 
myAssembly = Assembly.LoadFile("myDll.dll"); 

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

Here你可以找到一个很好的教程。

+0

这是我想要的,谢谢。 – ocanal 2011-04-19 17:03:08

5

DllImport用于调用非托管代码。您显示的MyClass类是托管代码,为了在另一个程序集中调用它,只需包含它并调用方法add reference to the assembly。例如:

using System; 
using mydll; 

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

不,我想在程序运行时添加dll ,而不是添加引用选项,所以我如何创建一个非托管的DLL? – ocanal 2011-04-19 08:35:12

+0

@ocanal,可以在运行时使用Reflection和[Assembly.LoadFrom](http://msdn.microsoft.com/zh-cn/library/1009fa28.aspx)方法加载程序集。一旦程序集被加载,你可以列出里面的所有类型并调用它们的方法。 – 2011-04-19 09:05:50

0

如果双方都是.NET,您仍然需要一些通用接口(或使用动态)。如果你有这个地方,你可以使用Reflection或ComponentModel。