Ответы пользователя по тегу DLL
  • Как отловить исключение из неизвестного места в DLL?

    AlexanderYudakov
    @AlexanderYudakov
    C#, 1С, Android, TypeScript
    Я бы изолировал весь этот говнокод в отдельных процессах - дочерних по отношению к процессу основной программы. Т.е. на каждую библиотеку - запускается свой процесс, где работает а) эта библиотека и б) механизм обмена данными с процессом основной программы. Больше ничего.

    Упал дочерний процесс с библиотекой - да и ладно.

    Придется, конечно, сделать механизм межпроцессного взаимодействия. Но раз уж 24х7, можно и потрудиться. Зато потом можно спокойно жить.
    Ответ написан
    1 комментарий
  • Как создать экземпляр класса из динамически подключенной DLL?

    AlexanderYudakov
    @AlexanderYudakov
    C#, 1С, Android, TypeScript
    var assembly = Assembly.LoadFrom("c:\plugins\table.dll");
    var type = assembly.GetType("MyNamespace.Table");
    var instance = (ITable) Activator.CreateInstance(type);


    P.S. Пример полного работающего решения:
    Common.dll / IPlugin.cs
    namespace Common
    {
        public interface IPlugin
        {
            string GetName();
        }
    }
    Plugin.dll / Plugin.cs
    using Common;
    
    namespace Plugin
    {
        public sealed class Plugin : IPlugin
        {
            public string GetName()
            {
                return "Cool Plugin!";
            }
        }
    }
    PluginsTest.exe / Program.cs
    using Common;
    using System;
    using System.Diagnostics;
    using System.Linq;
    using System.Reflection;
    
    namespace PluginsTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                var plugin = LoadPlugin("..\\..\\..\\Plugin\\bin\\Debug\\Plugin.dll");
                var name = plugin.GetName();
                Debug.WriteLine("Plugin loaded: " + name);
            }
    
            static IPlugin LoadPlugin(string path)
            {
                var type = Assembly
                    .LoadFrom(path)
                    .GetTypes()
                    .First(typeof(IPlugin).IsAssignableFrom);
    
                return (IPlugin)Activator.CreateInstance(type);
            }
        }
    }

    Зависимости:
    Plugin.dll → Common.dll
    PluginsTest.exe → Common.dll
    Ответ написан
  • Как создать WPF окно в Dll?

    AlexanderYudakov
    @AlexanderYudakov
    C#, 1С, Android, TypeScript
    Все просто. Кнопка "добавить окно" отсутствует, но никаких запретов на окна в dll нет.

    На вскидку пара способов, как обойтись без кнопки:

    1. Создаете UserControl, переименовываете его в Window.

    2. Копируете пару файлов xaml и xaml.cs в папку проекта. В обозревателе решений жмем "Показать все файлы" - показываются те, которые не включены в проект, выбираем их, включаем в проект.
    Ответ написан
    Комментировать