Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2012, 13:19   #1
LISTAT
Пользователь
 
Регистрация: 27.10.2011
Сообщений: 50
По умолчанию вызов метода с параметрами из Dll

Доброго времени суток. Возникла следующая проблема.
Имеется Dll написанная на C# со следующим кодом
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary1
{
    public class Class1
    {
        public string StrRes(string s,int i)
        {
            return s.Reverse() + " " + Convert.ToString(i);
        }

        public void ModalFormShow()
        {
            MyForm MF = new MyForm();
            MF.Show();
        }
    }
}
как мне динамически подключить эту библиотеку во время выполнениия программы и вызвать метод StrRes передав ему два параметра. Слышал про класс Assembly для загрузки сборок, в интернете много примеров, но я ничего не понял, хотелось бы пошагово разобраться, что зачем надо делать. Спасибо.
LISTAT вне форума Ответить с цитированием
Старый 18.03.2012, 13:34   #2
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Компилируете с помощью Visual Studio или напрямую csc?
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Старый 18.03.2012, 13:35   #3
LISTAT
Пользователь
 
Регистрация: 27.10.2011
Сообщений: 50
По умолчанию

Цитата:
Сообщение от Lasur Посмотреть сообщение
Компилируете с помощью Visual Studio или напрямую csc?
В Visual Studio 2010
LISTAT вне форума Ответить с цитированием
Старый 18.03.2012, 13:40   #4
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

В Solution Explorer в своем проекте в References указываете ссылку на свою сборку, далее просто using ClassLibrary1; или вызов метода через ClassLibrary1.Class1.StrRes(string, int);.
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Старый 18.03.2012, 13:56   #5
LISTAT
Пользователь
 
Регистрация: 27.10.2011
Сообщений: 50
По умолчанию

Цитата:
Сообщение от Lasur Посмотреть сообщение
В Solution Explorer в своем проекте в References указываете ссылку на свою сборку, далее просто using ClassLibrary1; или вызов метода через ClassLibrary1.Class1.StrRes(string, int);.
Мне необходимо загружать сборку динамически во время выполнения программы.
LISTAT вне форума Ответить с цитированием
Старый 18.03.2012, 14:02   #6
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Упс, невнимательно прочитал...
Вы с рефлексией знакомы?
Загрузка сборки:
Код:
Assembly assembly = Assembly.LoadFrom(AssemblyName);
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Старый 18.03.2012, 14:46   #7
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Подробно:
0)Переписываем методы как static дабы для из вызова не нужно было создавать экземпляр класса.
1)Компилируем dll. Запоминаем путь к dll файлу.
//string path = путь к dll
2)//string methodName = имя метода
Для реализации динамической подгрузки пишем код:
Код:
Assembly assembly = Assembly.LoadFile(path);
			Type type = assembly.GetType("ClassLibrary1.Class1");
			MethodInfo method = type.GetMethod(methodName);
3)//object[] params = параметры вызова
Для вызова соответствующего метода
Код:
method.Invoke(null, params)
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Старый 18.03.2012, 15:28   #8
LISTAT
Пользователь
 
Регистрация: 27.10.2011
Сообщений: 50
По умолчанию

Цитата:
Сообщение от Lasur Посмотреть сообщение
Упс, невнимательно прочитал...
Вы с рефлексией знакомы?
Загрузка сборки:
Код:
Assembly assembly = Assembly.LoadFrom(AssemblyName);
Знаком в общих чертах, знаю как получить ссылку на метод класса сборки, но как при вызове Invoke передать методу параметры плохо представляю.
LISTAT вне форума Ответить с цитированием
Старый 18.03.2012, 15:39   #9
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

К предыдущему моему сообщению есть вопросы?
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Старый 18.03.2012, 16:16   #10
LISTAT
Пользователь
 
Регистрация: 27.10.2011
Сообщений: 50
По умолчанию

Цитата:
Сообщение от Lasur Посмотреть сообщение
Подробно:
0)Переписываем методы как static дабы для из вызова не нужно было создавать экземпляр класса.
1)Компилируем dll. Запоминаем путь к dll файлу.
//string path = путь к dll
2)//string methodName = имя метода
Для реализации динамической подгрузки пишем код:
Код:
Assembly assembly = Assembly.LoadFile(path);
			Type type = assembly.GetType("ClassLibrary1.Class1");
			MethodInfo method = type.GetMethod(methodName);
3)//object[] params = параметры вызова
Для вызова соответствующего метода
Код:
method.Invoke(null, params)
Только один вопрос: как именно задавать параметры.
к примеру имеем метод
Код:
public string STRREVERSE(string s,int i)
{//некоторый код
}
Параметры необходимо задавать так:
Код:
public void LoadDll(string FileName)
{assembly = Assembly.LoadFile(FileName);
Type type = assembly.GetType("ClassLibrary1.Class1");
MethodInfo method = type.GetMethod("STRREVERSE");
object[] params ={TextBox1.Text,TextBox2.Text.ToInt32()};
}
А если класс "Class1" содержит конструктор, каким образом его вызывать и передавать ему параметры
К примеру
Код:
public class Class1
    {
        public Class1(string s,double a,b);
        {
           ......................................
        }
.............................................................
    }
LISTAT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов метода из метода kuzjma PHP 8 10.12.2010 02:38
Вызов макросов из меню с параметрами tae1980 Microsoft Office Excel 4 22.09.2010 22:59
Вызов метода в asm вставке. Mixasik Общие вопросы Delphi 3 20.02.2010 10:42
Вызов программы с параметрами bgmd.win Общие вопросы Delphi 2 05.01.2010 14:40
Вызов Метода из др. модуля Mickle Общие вопросы Delphi 2 10.05.2007 23:41