Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать .dll с "DllMain"? 
:(
    Опции темы
GoldFinch
Дата 25.4.2010, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Как сделать .dll, у которой при загрузке будет выполняться пользовательский код?
Нечто вроде DllMain, но достаточно вызывать этот только при загрузке .dll-ки

Язык - например C#, версия .NET 2-4.

=================

Пока что придумал способ делать .exe, потом править его загловок чтобы он стал .dll, дописывать к нему стаб c DllEntryPoint, который при DLL_PROCESS_ATTACH будет создавать поток, который будет вызывать оригинальную точку входа .exe или сразу mscoree._CorExeMain.
PM MAIL ICQ   Вверх
Любитель
Дата 25.4.2010, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Ээ.. А зачем это нужно?
Вообще говоря, для этого прописывается глобальны статик-конструктор, если речь про CIL. Физически, правда, глобального в дотнете ничего не может быть, поэтому генерируется специальный класс с именем <Module>. Из-под шарпа - в 99% случаев хватает статик-конструкторов. На крайний раз, можно прописать в after build степы патчинг сборки (для добавления статик конструктора к <Module>).


--------------------
PM MAIL ICQ Skype   Вверх
GoldFinch
Дата 25.4.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Любитель, мне это надо чтобы писать плагины на C# для нативной программы.
Все что умеет программа - это грузить .dll, и предоставлять им свое API, которое длл находят сами.

Цитата(Любитель @  25.4.2010,  20:24 Найти цитируемый пост)
прописать в after build степы патчинг сборки (для добавления статик конструктора к <Module>)

Можете показать как и чем это делается?
PM MAIL ICQ   Вверх
Любитель
Дата 25.4.2010, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(GoldFinch @  25.4.2010,  19:55 Найти цитируемый пост)
Любитель, мне это надо чтобы писать плагины на C# для нативной программы.

Я бы использовал обёртку на C++/CLI для таких целей. Если очень не нравится две длл-ки (обёртка плюс сама реализация) - можно воспользоваться ILMerge.

Что касается прописывания инициализатора модулей - то, если честно, я не уверен вообще будет ли это работать при загрузке из неуправляемого приложения (надо проверять). Если интересно, вот тут есть пример кода утилиты-патчера. Сразу замечу, что для модификации сборок там используется библиотека Mono.Cecil (наверно, лучшая для этой задачи).


--------------------
PM MAIL ICQ Skype   Вверх
A5uKa
Дата 26.4.2010, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



PM   Вверх
GoldFinch
Дата 26.4.2010, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



A5uKa, там создается программа которая грузит длл, а мне это не надо, у меня уже есть программа
PM MAIL ICQ   Вверх
Любитель
Дата 26.4.2010, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



GoldFinch, что-т такое впечатление, что всё плохо, если твоя длл-ка ничего не должна экспортировать, а только smile
То есть так или иначе рантайм придётся стартовать вручную (либо непосредственно _CorDllMain/_CorExeMain, либо использовать обёртку в виде COM). В C++/CLI в DllMain нельзя с менеджед объектами работать оказывается (ибо CLR позже инициализируется).


--------------------
PM MAIL ICQ Skype   Вверх
A5uKa
Дата 26.4.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



А разве конструктор не вызывается ?

п.с. вообще ничего не понимаю %D

Это сообщение отредактировал(а) A5uKa - 26.4.2010, 11:17
PM   Вверх
Любитель
Дата 26.4.2010, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



A5uKa, блин, загрузи дотнентую длл через LoadLibrary виндовую. Ничего дотнетного не вызовется.


--------------------
PM MAIL ICQ Skype   Вверх
A5uKa
Дата 26.4.2010, 16:18 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



Цитата(Любитель @ 26.4.2010,  14:05)
A5uKa, блин, загрузи дотнентую длл через LoadLibrary виндовую. Ничего дотнетного не вызовется.

НЕ ПОНИМАЮ ! Зачем загружать через виндовую ?


ясно  smile  мне почему-то фраза "нативной программы" ничего не сказала  smile 

п.с. а нафиг не использовать .net ?

Это сообщение отредактировал(а) A5uKa - 27.4.2010, 05:42
PM   Вверх
Любитель
Дата 26.4.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(A5uKa @  26.4.2010,  16:18 Найти цитируемый пост)
Зачем загружать через виндовую ?

Цитата(GoldFinch @  25.4.2010,  19:55 Найти цитируемый пост)
мне это надо чтобы писать плагины на C# для нативной программы.




--------------------
PM MAIL ICQ Skype   Вверх
jonie
Дата 27.4.2010, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



С++/CLR заюзать ?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.