Допомагаємо ЗСУ!

c# динамическое использование dll'ек

🟢 11:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
Статус: Offline
Реєстрація: 01.07.2008
Повідом.: 914
  • 🟢 11:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #1
c# динамическое использование dll'ек

Друзья! Помогите пожалуста примерчиком.
Есть dll библиотека классов с#.
Например с одним классом
Код:
namespace DynoDll
{
    public class Majestic
    {
        private int _a;
        public Majestic(int a)
        {
            _a = a;
        }
        public int Result()
        {
            return _a;
        }
    }
}

Надо написать консольную програмульку, использующую данную библиотеку, причем необходимо, чтоб путь к этой библиотеке можно было указывать как аргумент коммандной строки, а не сразу привязываться к ней перед компиляцией, задавая ее в References.
Например >MajUs.exe C:\DynoDll.dll

Код:
using System;
using DynoDll;
namespace MajUs
{
    class Program
    {
        static void Main(string[] args)
        {
             string pathToDll = args[0].ToString();

             Majestic maj = new Majestic(10);
             Console.WriteLine(maj.Result().ToString());
             Console.ReadKey();             
        }
    }
}
 
  • 🟢 11:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #2
копай пространство имён System.Reflection

Код:
Assembly asm = Assembly.LoadFrom("asm.dll");

Type type = asm.GetType("DynoDll.Majestic");

object getDllInstance = Activator.CreateInstance(type,15);
MethodInfo metinf = type.GetMethod("Result");
          
Console.WriteLine(metinf.Invoke(getDllInstance, null));

можно проще если в клиентском (для dll) приложении есть интерфейс который реализован внутри dll. Тогда не нужно будет получать методы на лету.
 
Останнє редагування:
  • 🟢 11:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #3
Kagemaru: за интерфейс +100!

При этом, если DLLку может потребоваться впоследствии выгрузить, нужно будет создать еще один AppDomain и загрузить DLL (сборку) туда.

P.S. Для более подробной информации гугли статейки про реализацию плагинов на .NET - это как раз твой случай.
 
  • 🟢 11:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #4
Спасибо огромное!

Ктати выложу тут пару ссылочек, что нашел в гугле с примерчиками, может кому-то понадобится..
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
 
Назад
Зверху Знизу