Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84

Исполнение функций подгружаемых во время исполнения программы из сторонних хранилищ

22.08.2016, 11:05. Показов 2659. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый, отзывчивые, знающие, смекалистые.
Не знаю как чётко сформулировать вопрос, поэтому опишу как смогу, надеюсь поймёте.(Опытным программистам к таким постановкам проблем не привыкать )
Язык C#.
Предположим что есть программа, которая по своей сути является оболочкой без особого функционала, но с пользовательским интерфесом (форма с полями ввода и кнопками). И вот эта программа, должна смотреть в определённом месте все файлы нами заданного типа. (пофиг каком, пусть папка с именем LibSrc которая рядом с экзешником самой программы лежит). Файлы эти по своей "структуре" однотипные, но по содержанию разные. Содержат эти файлы только функции. Причём функции только типа
C#
1
bool FuncNx(ref byte[][] args, ref String ReturnNameThisFuntion)
Если файлом ПОТРЕБУЕТСЯ для решения проблеммы ещё что-то содержать - это нормально и допустимо.
Программа же должна по желанию пользователся должна выдать список всех доступных функций из этих файлов и иметь возможность запускать выбранную пользователем из этого списка функцию с параметрами (котоыре все вида byte[][] args)
Собственно вопрос, какой сущьностью должны быть эти файлы с функциями? Библиотеками, сериализованными экземплярами класса или ещё чемто? И собственно как это должно работать?
Писать код не прошу(хотя и приветствую) но меня больше интересует сам подход и общая идея.
Варианты подходаЖ:
Была идея сделать эти файлы в виде DLL, но собственно как работать с данной конкретной библиотекой остаётся непонятным - самой программе же чтбы подгрузить библиотеку и воспользоваться функциями из неё нужно же знать имена этих функций, не так ли? Можно конечно в каждую такую длл ку засунуть функцию типа
C#
1
bool GiveMeYourFuncsList(ref List<DelegateMy> FuncList)
где
public delegate bool DelegateMy(ref byte[][] args, ref String ReturnNameThisFuntion);
Тоесть в каждой библиотеке есть функция с одним и темже именем которая возвращает лист с указателем на все её функции. Но я не уверен что такое вобще реализуемо, не пробовал, просто мысль.

Другая идея это каждый такой вот файл будет не DLL а сохраненный сериализованный класс(экземпляр?!), который является наследником от некоторого класса, который позволил бы организовать взаимодействие программы с нашей программой, но в каждом таком классе переопределены функции и их коичество(!), однако количество функций указано в виде константного поля.

Ваши коментарии, пожалуйста.

Добавлено через 2 минуты
Вы хоть маякните если "что автор хотел то вобще?! он сам то понял? я нет!"
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.08.2016, 11:05
Ответы с готовыми решениями:

Объединить вместе несколько сторонних облачных хранилищ
Подскажите, есть ли open-source программы, с помощью которых можно было бы объединить вместе несколько сторонних облачных хранилищ....

Ошибки во время исполнения программы
Приветствую всех форумчян. Во время исполнения программы система выдает 2 ошибки (см. вложения). Кто сталкивался с такими? Чем они...

Разное время исполнения программы
&quot;Баловался&quot; с кодом питона и наткнулся на интересный результат: один и тот же код выполняется разное время. Почему так? Понятно, что...

23
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.08.2016, 23:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от JustOneQuestion Посмотреть сообщение
так а где тогда хранятся то сами методы?
В самом объекте, естественно (про который вы думаете, что его как бы нет). Суслика видишь? Нет. Вот и я не вижу. А он есть. (с)
Цитата Сообщение от JustOneQuestion Посмотреть сообщение
что с остальными полявми и методами экземпляра класса, они тоже живы или нет? На них то вроде уже нет ссылок.
Если есть объект, есть и все его члены, естественно.
Цитата Сообщение от JustOneQuestion Посмотреть сообщение
пока там будем стоять, попробовать удалить файл DLLки то будет отказано в доступе. Ээто то почему?
Именно потому, что файл в данный момент используется (выше сказано кем).
Ну и почитайте, к примеру, Рихтера, самое начало, там в деталях рассказано, как работает выполнение кода в CLR. Чтобы меньше вопросов возникало.
Выше вам уже несколько советов давали, используйте плагины (в той или иной реализации) и не забивайте себе голову.
0
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
24.08.2016, 12:13  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
При вызове этих функций, вызовы переадресовываются в класс, загруженный из сборки.
Ну вот собственно этот момент и интересен теперь. MethodInfo.Invoke получается каждый раз при вызове лезет в файл DLL на диске и пытается вполнить что-то из него? Или всётаки можно както сделать так чтобы класс или отдельные методы из DLL были загружены ... в память и уже исполнялись оттуда. Тут правда ещё сразу вопрос возникает, а память для объекта класса и память для тела метода она одна или принципиально разная, и в памяти объекта содержаться лишь указатели на ту память(другую вероятно какуюто) где хранятся методы. А чем тогда статик и не статик методы отличаются в этом смысле?

Цитата Сообщение от golubyatnikovtv Посмотреть сообщение
На мой взгляд, перед тем как работать с плагинами, нужно разобраться с рефлексией. Стоит попариться.
Я пожалуй соглашусь с этим. Прежде чем брать и использовать уже некое готовое решение, полезно бывает понять пробелму, которая послужила причиной поиска и создания этого решения. В противном случае это готовое будет восприниматься как нечто чужеродное и подсознательно отторгаться. (Вы уж простите за оффтоп)

А что касается
Цитата Сообщение от insite2012 Посмотреть сообщение
Плохо что не понимаете.

Ну и почитайте, к примеру, Рихтера, самое начало, там в деталях рассказано, как работает выполнение кода в CLR. Чтобы меньше вопросов возникало.
Я всё же сторонник того, чтобы читать лишь после того как возникают вопросы. Тогда то что читаешь и ближе и понятнее становится, и вопринимается легче. А Рихтера что именно советуете прочитать(или ещё кого) касательно вопросов об организации памяти кода и переменных? Пока что меня это больше интресует.
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
24.08.2016, 15:18
JustOneQuestion,
Рихтер Дж.
Р55 CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на
языке C#. 4-е изд. — СПб.: Питер, 2013. — 896 с.: ил. — (Серия «Мастер-класс»).


В книге прекрасно расписано содержание, посмотрите что интересует.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
24.08.2016, 16:10
Цитата Сообщение от JustOneQuestion Посмотреть сообщение
сторонник того, чтобы читать лишь после того как возникают вопросы.
Ятд, подход не верный. Я сторонник того, что нужно читать, чтобы вопросов вообще не возникало (ну или возникали, но редко).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2016, 16:10

Определение функции во время исполнения программы
Добрый день! Прошу помощи. Скажите, реально ли определить функцию во время исполнения программы? Задача вообще такова: есть набор...

Создание объектов во время исполнения программы
ну от должна вона работать,а не работает,викладою.там все далжно работать,нзнаю.там описание только к кнопке,и все,больше описаний...

Оценить время исполнения программы, собственные команды
Нашел старую задачу, долго над ней думал, кое-что наработал, но не решил Реализовал почти все команды, но как сделать loop не могу...

Изменение значения Label во время исполнения программы
В поле edit ввожу строку, как реализовать подсчет длины строки в поле Label во время ввода(т.е. чтобы совместно с вводом изменялось и...

Как определить платформу во время исполнения программы?
Коллеги ! Кто знает, как во время исполнения программы на Java определить под какой операционкой она работает: Windows, Unix или Linux ?


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru