![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
Загружаю dll'ки из каталога, заранее их имена и количество не известны. Как передать не const в DllImport? Или может есть еще какой нибудь способ загрузки длл?
|
|||
|
||||
| Exception |
|
||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Код
Вот это вынеси в отдельный файл:
Как этим добром пользоваться? Во-первых, объявим класс-обёртку для библиотеки, наследник Library:
Во-вторых, добавим в него определение какой-нибудь функции:
Далее, напишем метод-обёртку:
Не забудьте определить конструктор:
Вот и всё! Использование:
Разумеется, никто не мешает хранить lib в поле какого-нибудь класса, но тогда не забудьте вызвать метод Dispose () по окончании работы с библиотекой! Замечания За основу был взят этот код. Код не проверял на работоспособность, так как писал прямо в браузере. Проверяйте сами Это сообщение отредактировал(а) Exception - 20.4.2007, 23:27 |
||||||||||||
|
|||||||||||||
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
Exception, спасибо! Получается компилятор должен знать пути при компиляции. Как все запущено! Неужели нельзя было предусмотреть такую мелочь, как загрузка длл с динамическим путем?! Или может я чего-то не понимаю?!
В твоем коде, на делегат ругается в этом условии : where TDelegate : Delegate, пишет, что неможет быть классом Delegate |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
emmanuil, LoadLibrary загрузит длл-ку если та лежит в текущей папке или по одному из путей в переменной PATH. Иначе нужно указывать полный путь к длл.
-------------------- ![]() |
|||
|
||||
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
Код Exception'а вполне рабочий, только если исправить метод GetDelegate. класс Delegate является абстрактным классом, может поэтому нельзя сделать where TDelegate : Delegate.
Всем спасибо, особенно Exception'у |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Вопрос на засыпку: а как тогда указать что TDelegate это делегат?
У меня сейчас компилятора нет под рукой.. |
|||
|
||||
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
Если только так
Нужно тогда просто кроме делегата ничего не подавать, но это не решение! От System.Delegate нельзя сделать даже производный класс! System.Delegate - абстрактный класс! Может я что попутал?! Может ктонибудь знает как это сделать?! |
|||
|
||||
| Exception |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Сам себе противоречишь Да и конструкция
на самом деле компилируется в
Это сообщение отредактировал(а) Exception - 25.4.2007, 16:11 |
||||||
|
|||||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Delegate и Multicast delegate - специальные классы. Их нельзя программно наследовать, но при этом все объявленные делегаты от них неявно наследуются. Кому-нибудь известна мотивация? Впрочем, если бы было иначе, то в where их указать всё-равно не удастся, поскольку constraint where принимает только interface-ы и new() - наличие конструктора по умолчанию. + Интересная тема. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |