2012-01-20 9 views
4

私は2つの数値を合計する機能が含まれているC#ClassLibraryを持っている:DLLを外部プログラムにロードしていますか?

namespace ClassLibrary1 
{ 
    public class Calculator 
    { 
     public int Calc(int i, int b) { 
      return i + b; 
     } 
    } 
} 

私は外部から他のC#アプリケーションからこのDLLをロードします。これどうやってするの?

+0

Visual Studioを使用している場合:参照を追加してから、あなたのDLLを検索 – MCSI

+0

.NET/C#の基本についてお読みになりましたか? –

+0

なぜこれがダウン表示されますか?それは明白ではないかもしれません(とにかく明白です)。 @ minitechの答えを見てください。 –

答えて

12

を名前空間を含めるよりも場合は、あなたがロードしたい意味しますか動的に、ファイル名で? [はい、次のようにAssembly.LoadFileメソッドを使用することができます。

// Load the assembly 
Assembly a = Assembly.LoadFile(@"C:\Path\To\Your\DLL.dll"); 

// Load the type and create an instance 
Type t = a.GetType("ClassLibrary1.Calculator"); 
object instance = a.CreateInstance("ClassLibrary1.Calculator"); 

// Call the method 
MethodInfo m = t.GetMethod("Calc"); 
m.Invoke(instance, new object[] {}); // Get the result here 

hereから翻訳例を、私はそれがとても心配しないでください書いて!)だけminitechによって答えに構築

+0

その他の例はこちら:http://www.csharp-examples.net/reflection-examples/ – Fabio

-1

Visual Studioでプロジェクトエクスプローラの参照を右クリックし、単にアセンブリを選択します。そして、あなたはそれを使用することができます。

using ClassLibrary1; 

class Program 
{ 
    static void Main() 
    { 
     Calculator calc = new Calculator(); 
     int result = calc.Cal(1, 2); 
    } 
} 
-1

your'eは、あなたのプロジェクトでは、このDLLを参照することができますVisual Studioを使用して、新しいソースコードに

2

..もしあなたはC#4.0を使用することができますが、いくつかの反射呼び出しを省略することができます。タイプdynamicののinstanceとしてここ

public static void Main() 
    { 
     Assembly ass = Assembly.LoadFile(@"PathToLibrar\ClassLibraryTest.dll"); 
     var type = ass.GetType("ClassLibrary1.Calculator"); 
     dynamic instance = Activator.CreateInstance(type); 
     int add = instance.Calc(1, 3); 
    } 

、あなたは反射によって方法Calcを見つけることはありません。

しかし、最良の方法は、あなたがオブジェクトを構築するために最小限の反射を行うことができます

public class Calculator : ICalculator 
{ 
    public int Calc(int i, int b) 
    { 
     return i + b; 
    } 
} 

下流

public interface ICalculator 
    { 
     int Calc(int i, int b); 
    } 

上流のインタフェースを定義し、あなたのクラスでそれを実装することです。

public static void Main() 
    { 
     Assembly ass = Assembly.LoadFile(@"PathToLibrar\ClassLibraryTest.dll"); 
     var type = ass.GetType("ClassLibrary1.Calculator"); 
     ICalculator instance = Activator.CreateInstance(type) as ICalculator; 
     int add = instance.Calc(1, 3); 
    } 

これは、最高のパフォーマンスを提供します。

関連する問題