ホームに戻る
出典 :
関連 :
目次 :
C#によるライブラリ(DLL)の作成と結合
C#(.NET)ではDLLを動的にも静的にも結合することができ、C++と比較してその手順は簡便である。
以下、Visual Studioを用いた場合の手順を示す。
呼ばれる側(DLL)の作成
-
新しいプロジェクトとして、「クラス ライブラリ」を作成する。
-
空のクラスが作成される。
-
任意の処理を実装し、ビルドを行う。
以下実装例。
namespace ClassLibrary1
{
public class Class1
{
// - = - = - = - = - = - = - = - = - = -
// private メンバ
// - = - = - = - = - = - = - = - = - = -
// データリスト
private List<MyData> list_Data = new List<MyData>();
// - = - = - = - = - = - = - = - = - = -
// public メソッド
// - = - = - = - = - = - = - = - = - = -
// [static]足し算を行う
public static int Add(int a, int b) => a + b;
// データリストにデータを追加する
public int AddMyData(MyData data)
{
if (data != null)
{
list_Data.Add(data);
}
return list_Data.Count;
}
// 指定されたインデクスのデータを返す
public MyData DataSearch(int serachIndex) =>
list_Data.FirstOrDefault(x => x.index == serachIndex);
}
// 試験用データ
public class MyData
{
public int index;
public double data;
}
}
呼ぶ側 - 静的結合
以下の手順により、アセンブリ(DLLまたはEXE)の内容を参照することができる。
-
プロジェクトを開き、ソリューション エクスプローラ上でプロジェクトを右クリック、
「追加」>「プロジェクト参照」を選択する。
-
左ペインで「参照」を選択し、ボタン「参照」を押す。
-
呼び出すアセンブリを選択する。
-
3. で選択したアセンブリ(の名前空間)が「依存関係」>「アセンブリ」下に追加されれば成功。
呼ぶ側 - 動的結合
動的に結合することも可能。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace CSharpConsole
{
class Program
{
static void Main(string[] args)
{
var asm = Assembly.LoadFrom("CSharpDll.dll"); //< アセンブリ(CSharpDll.dll)の読み込み
var module = asm.GetModule("CSharpDll.dll"); //< アセンブリ(CSharpDll.dll)からモジュールを取得
var Person = module.GetType("CSharpDll.Person"); //< モジュール中の利用するクラス(or 構造体)を取得
// ^^^^^^^^^ ^^^^^^
// ↑ ↑
// 名前空間 │
// クラス
if (Person != null)
{
// CSharpDll.Personクラスをインスタンス化
// (コンストラクタへ引数を渡すことも可能)
dynamic p1 = Activator.CreateInstance(Person, "Aiueo", 29);
// ^^^^^^^ ^^^^^^^^^^
// ↑ ↑
// クラス │
// コンストラクタ引数
Console.WriteLine($"name= {p1.Name}");
Console.WriteLine($"age= {p1.Age}");
Console.WriteLine(p1.ToString());
}
Console.ReadKey();
}
}
}