2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#で外部DLLを実行してみる

Posted at

1. はじめに

  • C#で外部DLLを指定して実行したい
  • DLL名は参照設定せず、動的に取得したい

2. 開発環境

  • C#
  • .NET8
  • Visual Studio 2022
  • Windows 11

3. DLLサンプル作成 (呼び出し先)

  • C#のクラスライブラリプロジェクトよりサンプルのDLLを作成する
namespace ClassLibrary1
{
    public class DLLTest
    {
        public int Id { get; set; }
        public string Name { get; set; }

        // コンストラクタ(引数なし)
        public DLLTest() : this(0, "") { }

        // コンストラクタ(引数あり)
        public DLLTest(int id, string name) => (Id, Name) = (id, name);

        // 文字列変換
        public override string ToString() => $"Id={Id},Name={Name}";
    }
}

4. サンプルソース (呼び出し元)

  • DLLをEXEと同じフォルダに配置して実行する
using System.Reflection;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var asm = Assembly.LoadFrom("ClassLibrary1.dll");       // アセンブリの読み込み
                var module = asm.GetModule("ClassLibrary1.dll");        // アセンブリからモジュールを取得
                var DLLTest = module?.GetType("ClassLibrary1.DLLTest");    // 利用するクラス(or 構造体)を取得

                if (DLLTest != null)
                {
                    // CSharpDll.Personクラスをインスタンス化.
                    // コンストラクタへ引数を渡すことも可能.
                    dynamic p1 = Activator.CreateInstance(DLLTest, 1, "TEST");

                    if (p1 != null)
                    {
                        // dynamicで受けているので, 面倒なプロパティ取得やメソッド取得を省略できる.
                        Console.WriteLine($"name= {p1.Id}");
                        Console.WriteLine($"age= {p1.Name}");
                        Console.WriteLine(p1.ToString());
                    }
                }
                Console.ReadKey();
            } catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}

5. 参考文献

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?