![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
Как сделать .dll, у которой при загрузке будет выполняться пользовательский код?
Нечто вроде DllMain, но достаточно вызывать этот только при загрузке .dll-ки Язык - например C#, версия .NET 2-4. ================= Пока что придумал способ делать .exe, потом править его загловок чтобы он стал .dll, дописывать к нему стаб c DllEntryPoint, который при DLL_PROCESS_ATTACH будет создавать поток, который будет вызывать оригинальную точку входа .exe или сразу mscoree._CorExeMain. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
Ээ.. А зачем это нужно?
Вообще говоря, для этого прописывается глобальны статик-конструктор, если речь про CIL. Физически, правда, глобального в дотнете ничего не может быть, поэтому генерируется специальный класс с именем <Module>. Из-под шарпа - в 99% случаев хватает статик-конструкторов. На крайний раз, можно прописать в after build степы патчинг сборки (для добавления статик конструктора к <Module>). |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
Любитель, мне это надо чтобы писать плагины на C# для нативной программы.
Все что умеет программа - это грузить .dll, и предоставлять им свое API, которое длл находят сами.
Можете показать как и чем это делается? |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
Я бы использовал обёртку на C++/CLI для таких целей. Если очень не нравится две длл-ки (обёртка плюс сама реализация) - можно воспользоваться ILMerge. Что касается прописывания инициализатора модулей - то, если честно, я не уверен вообще будет ли это работать при загрузке из неуправляемого приложения (надо проверять). Если интересно, вот тут есть пример кода утилиты-патчера. Сразу замечу, что для модификации сборок там используется библиотека Mono.Cecil (наверно, лучшая для этой задачи). |
|||
|
||||
| A5uKa |
|
|||
|
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 3 Всего: 16 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
A5uKa, там создается программа которая грузит длл, а мне это не надо, у меня уже есть программа
|
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
GoldFinch, что-т такое впечатление, что всё плохо, если твоя длл-ка ничего не должна экспортировать, а только
То есть так или иначе рантайм придётся стартовать вручную (либо непосредственно _CorDllMain/_CorExeMain, либо использовать обёртку в виде COM). В C++/CLI в DllMain нельзя с менеджед объектами работать оказывается (ибо CLR позже инициализируется). |
|||
|
||||
| A5uKa |
|
|||
|
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 3 Всего: 16 |
А разве конструктор не вызывается ?
п.с. вообще ничего не понимаю %D Это сообщение отредактировал(а) A5uKa - 26.4.2010, 11:17 |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
A5uKa, блин, загрузи дотнентую длл через LoadLibrary виндовую. Ничего дотнетного не вызовется.
|
|||
|
||||
| A5uKa |
|
|||
|
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 3 Всего: 16 |
НЕ ПОНИМАЮ ! Зачем загружать через виндовую ? ясно п.с. а нафиг не использовать .net ? Это сообщение отредактировал(а) A5uKa - 27.4.2010, 05:42 |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
||||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
С++/CLR заюзать ?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |