Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
objaa
42 / 42 / 28
Регистрация: 06.07.2011
Сообщений: 353
1

Вызов метода из сборки

25.08.2013, 00:17. Просмотров 860. Ответов 5
Метки нет (Все метки)

Всем привет
Я хочу сделать вызов метода из подгруженной сборки
Код загрузчика, который загружает длл и пытается вызвать метод:

C#
1
2
3
4
5
Assembly s = Assembly.LoadFile(Application.StartupPath + "\\obj.dll");
            Type ourClass = s.GetType("dll_test.Form1");
            Object instane = Activator.CreateInstance(ourClass);
            MethodInfo meth = ourClass.GetMethod("versuta");
            meth.Invoke(instane, null);
Код сборки(dll):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System.Windows.Forms;
 
namespace dll_test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        void versuta()
        {
            MessageBox.Show("wowow");
        }
    }
}
Но я получаю ошибку:

Код
Необработанное исключение типа "System.NullReferenceException" в dinamic compiler.exe
Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.
Чтоже я делаю не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 00:17
Ответы с готовыми решениями:

Динамическая компиляция и вызов из сборки
Доброе время суток. Хотелось бы реализовать динамическую компиляцию, но...

Вызов метода C# из JavaScript
Пишу сайт на ASP.NET и у меня возникла трудность. Необходимо чтобы функция на...

Вызов из c# метода в Dll с++
Доброго времени суток, нужна помощь имеется ДЛЛ написанная на с++ И мои труды...

Вызов не статического метода в статическом
Добрых времени суток. Я знаю что для такого вызова можно просто создать...

Вызов атрибута вначале метода и в конце
Здравствуйте. Есть некий метод, к примеру private void UpdateData() { }...

5
Anklav
442 / 301 / 46
Регистрация: 23.01.2013
Сообщений: 640
Завершенные тесты: 2
25.08.2013, 00:33 2
Если агрументов у метода 0, то нужно создавать массив нулевого размера.

C#
1
meth.Invoke(instane, new Object[0]);
Еще вы метод объявили приватным, а по умолчанию метод ищется открытый и экземплярный.
1
objaa
42 / 42 / 28
Регистрация: 06.07.2011
Сообщений: 353
25.08.2013, 00:38  [ТС] 3
Цитата Сообщение от Anklav Посмотреть сообщение
Если агрументов у метода 0, то нужно создавать массив нулевого размера.

C#
1
meth.Invoke(instane, new Object[0]);
Спасибо, беда была в том, что метод не public
А если метод принимает аргументы?
к примеру: versuta(string z, int a)?
Как быть?
0
Psilon
Master of Orion
Эксперт .NET
6003 / 4853 / 902
Регистрация: 10.07.2011
Сообщений: 14,460
Записей в блоге: 5
Завершенные тесты: 4
25.08.2013, 00:39 4
Мб так тоже будет норм:
C#
1
2
3
4
            MethodInfo meth = ourClass.GetMethod("versuta");
            object[] param = meth.GetParameters().Select(x => x.DefaultValue).ToArray();
           
            meth.Invoke(instane, param);
Правда со строками он странно рабоатет иногда, пытается привести строку к типу DbNull
1
Anklav
442 / 301 / 46
Регистрация: 23.01.2013
Сообщений: 640
Завершенные тесты: 2
25.08.2013, 00:40 5
Да я после уже заметил (и обновил сообщение выше).
Ну создаете массив с аргументами.

C#
1
meth.Invoke(instane, new Object[] {"sdsd", 93});
1
Psilon
Master of Orion
Эксперт .NET
6003 / 4853 / 902
Регистрация: 10.07.2011
Сообщений: 14,460
Записей в блоге: 5
Завершенные тесты: 4
25.08.2013, 00:44 6
Более правильный вариант:
C#
1
2
3
4
ParameterInfo[] parameterInfos = meth.GetParameters();
var parameters =  parameterInfos.Select(x => x.ParameterType)
                                .Select(t => t.IsValueType ? Activator.CreateInstance(t) : null)
                                .ToArray();
для вызова метода со всеми значениями по-умолчанию.
1
25.08.2013, 00:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 00:44

Вызов родительского метода после BeginInvoke
Есть форма с гридом. Пользователь из нее может запустить довольно...

Вызов метода дочернего класса из базового
Привет всем. Ни как не могу понять как позволить базовому классу вызвать метод...

Следить за вызовом методов сборки из другой сборки
Подтолкните, в каком направлении копать. Хочу написать программку, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru