Я только начиная изучать C#. Меня интересует вопрос использования файлов dll в программах, написанных на dll. Я посмотрел поиск на эту тему сообщений на форуме; результат поиска — более сотни сообщений, но каждый раз поднимается какая-то конкретная проблема, и новичку не совсем понятно очем идет речь. Если не трудно можете дать ссылки на какие-нибудь документы на этом сайте или в сети, где всесторонне обсуждался бы этот вопрос (на этом сайте я просматривал статью "Использование DLL в программе на Visual C++" Александра Шаргина — но там речь идет о VC++).
Здравствуйте, Shkval, Вы писали:
S>Всем доброго времени суток.
Ну все просто, и обсуждать всесторонне нечего...
Делаешь новый проект на C#, тип проекта — Class Library, пишешь в нем свой класс(классы). Потом делаешь новый проект, приложение с формами например, подключаешь свою библиотеку. Создаешь объекты классов из своей библиотеки, вызываешь их методы, и радуешься как все работает.
Здравствуйте, Alex_13, Вы писали:
A_>Ну все просто, и обсуждать всесторонне нечего... A_>Делаешь новый проект на C#, тип проекта — Class Library, пишешь в нем свой класс(классы). Потом делаешь новый проект, приложение с формами например, подключаешь свою библиотеку. Создаешь объекты классов из своей библиотеки, вызываешь их методы, и радуешься как все работает.
Более того, твой код может быть на C#, библиотека — на VB.NET или наоброт. И все создается, и все работает, и проблем с памятью никаких. Смотришь и радуешься, как работает.
Здравствуйте, Alex_13, Вы писали:
A_>Здравствуйте, Shkval, Вы писали:
S>>Всем доброго времени суток.
A_>Ну все просто, и обсуждать всесторонне нечего... A_>Делаешь новый проект на C#, тип проекта — Class Library, пишешь в нем свой класс(классы). Потом делаешь новый проект, приложение с формами например, подключаешь свою библиотеку. Создаешь объекты классов из своей библиотеки, вызываешь их методы, и радуешься как все работает.
Действительно, когда в этом хорошо разбираешься, то такая простота — это большой плюс, но мне хотелось бы понять, что там внутри происходит. При этом в постах из этого форума часто упоминаются managed и unmanaged dll библиотеки (я примерно так понимаю, что unmanaged — это те которые были раньше, а managed — те которые создаются специально под .Net) — хотелось бы подробнее разобраться.
А вообще прикладная проблема, которая сейчас передо мной стоит — это динамическая загрузка dll из приложения. Т.е. в dll библиотеках хранятся, предположим, разные формы кисточек для программы графического редактора. При этом пользователь в праве настроить набор кистей, которые он хочет использовать, самостоятельно. Он во время исполнения указывает, какие кисти ему нравятся — а я загружаю только те библиотеки, которые для этого требуются. При этом путь к этим библиотекам не статичен (т.е. нельзя сделать reference на них) — продвинутый пользователь может сам указать путь к соответствующей dll во время исполнения программы.
Здравствуйте, Shkval, Вы писали:
S>Действительно, когда в этом хорошо разбираешься, то такая простота — это большой плюс, но мне хотелось бы понять, что там внутри происходит. При этом в постах из этого форума часто упоминаются managed и unmanaged dll библиотеки (я примерно так понимаю, что unmanaged — это те которые были раньше, а managed — те которые создаются специально под .Net)
Именно так.
S>хотелось бы подробнее разобраться.
С чем именно? С загрузкой которых библиотек?
S>А вообще прикладная проблема, которая сейчас передо мной стоит — это динамическая загрузка dll из приложения. Т.е. в dll библиотеках хранятся, предположим, разные формы кисточек для программы графического редактора. При этом пользователь в праве настроить набор кистей, которые он хочет использовать, самостоятельно. Он во время исполнения указывает, какие кисти ему нравятся — а я загружаю только те библиотеки, которые для этого требуются. При этом путь к этим библиотекам не статичен (т.е. нельзя сделать reference на них) — продвинутый пользователь может сам указать путь к соответствующей dll во время исполнения программы.
Ну для начала возьми ass = Assembly.LoadFrom. Так грузятся NET библиотеки, а ты получаешь ссылку на нее — это ass. Дальше ass.CreateInstance — получаешь объект. Дальнейшие пути зависят от того, полученные классы порождены от кого-то одного или они сделаны как попало.
А если ты вздумал грузить и работать с non-managed библиотекой, которая тебе возвращает какой-то свой non-managed объект, то серый волк тебе товарищ. Я этим не занимался и никому не посоветую. Максимум — вызвать кого-нить из user32.dll или kernel32.dll.
Здравствуйте, Mab, Вы писали:
A>>Так грузятся NET библиотеки, а ты получаешь ссылку на нее — это ass. Mab>Ну насчет последнего я бы не был так категоричен... Можно и по-другому назвать.
Здравствуйте, Andrbig, Вы писали:
A>А если ты вздумал грузить и работать с non-managed библиотекой, которая тебе возвращает какой-то свой non-managed объект, то серый волк тебе товарищ.
неправда ваша, RSDN ему товарищ A>Я этим не занимался и никому не посоветую. Максимум — вызвать кого-нить из user32.dll или kernel32.dll.
ничего там особо страшного нет... Взаимодействие с DLL