| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Динамическая подгрузка необходимых длл |
| Автор: Exception 12.4.2005, 14:53 |
| САБЖ. Я где-то читал, что надо Assembly.LoadFrom, но как конкретно не знаю. Помогите pls. ЗЫ Примеры желательно на VB .NET, но можете накалякать на C# или Delphi for .net |
| Автор: chipset 12.4.2005, 15:03 |
| MSDN в данном случае рулит, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemreflectionassemblyclassloadfromtopic1.asp |
| Автор: mr.DUDA 12.4.2005, 15:32 |
| P.S. LoadFrom - только в случае, если надо загрузить длл из указанной директории. Есть ещё Assembly.Load, который позволяет грузить Assembly из (в порядке очерёдности) текущей директории, public-директории, из PrivateBinPath (указанных в .config-файле), из GAC, из массива байтов... Есть ещё LoadWithPartialName, который грузит сборку из GAC, по её частичному имени... Много чего есть Добавлено @ 15:34 P.S. (2) а обычно используют не имя длл, а имя класса, который нужен. То есть, к примеру, plugin прописывается своим именем класса, а в программе, загружающей этот plugin, используется Type.GetType(name), и в итоге нужная длл-ка загружается автоматически, возвращается тип. (А потом уже можно юзать Activator.CreateInstance(type) или type.CreateInstance). |
| Автор: Exception 13.4.2005, 12:40 | ||
| Вы уж меня извините за настойчивость, но проблема такова: загружается класс с помощью LoadFrom и создается CreateInstance. Но в конструкторе есть такие параметры:
Почему-то, когда в массив я пихаю мои объекты, он все равно пишет MissingMethodException |
| Автор: arilou 13.4.2005, 12:56 | ||
А ты не пробовал сделать так:
? |
| Автор: Exception 15.4.2005, 10:16 |
| У меня лезет куча ошибок в твоем коде, arilou. А C# я плохо знаю, так что если уж на шарпе, то тогда без ошибок плз |
| Автор: arilou 15.4.2005, 11:58 | ||
Вот то же самое на VB:
Сорри за немного туманный первый пост, я думал, если ты заморачиваешься c Reflection, то, возможно, уже ориентируешься в вызовах. Добавлено @ 11:59 в obj будет положен созданный экземпляр. |
| Автор: Exception 16.4.2005, 12:02 | ||
| Возможно, я окончательно отупел Мой код:
Конструктор Test.Test принимает IGUI,Byte и Byte. Класс GUIClass.Gui реализует интерфейс BaseClass.IGUI. В референсах естессно есть BaseClass.dll и GuiClass.dll. ЧТО НЕ ТАК, НЕ ПОЙМУ! |
| Автор: mr.DUDA 16.4.2005, 15:45 |
| Посмотри в отладке, что возвращает typ.GetConstructors( ), и есть ли среди полученных конструкторов тот, у которого аргументы совпадают с нужными тебе (с помощью ConstructorInfo.GetParameters( )). |
| Автор: Exception 17.4.2005, 12:13 | ||
| По идее все должно работать: параметры - BaseClass.IGUI& , System.Byte и System.Byte. Странно, может дело в BindingFlags? По крайней мере я решил проблему получением массива конструкторов и инвокированием первого из них.
Всем спасибо, mr.DUDA и arilou, вам плюсы в репу |
| Автор: arilou 18.4.2005, 11:08 | ||
Согласен, задачу решает, но надо найти, в чем проблема. Я сегодня забодяжу тест, чтобы проверить. |
| Автор: arilou 18.4.2005, 13:09 | ||
| Run-time error Я сделал тест:
Подобрал комбинацию BindingFlags, которая нормально работает: BindingFlags.Default Or BindingFlags.Public Or BindingFlags.Instance Попробуй у себя. |
| Автор: Exception 19.4.2005, 11:59 |
| Не-а. Не работает Но это уже не важно |