2011-04-19 56 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。