![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Verus |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 5.8.2008 Репутация: нет Всего: нет |
Суть такая что есть функции в дллке:
и
Когда произвожу дебаг с помощью привязки в regsvr32.exe в студии, то все проходит хорошо. А когда например установлю dll'ку в систему и после перезагрузки она должна запускаться автоматически, ничего не происходит. Пытаюсь ее удалить - нельзя, значит всетаки она загрузилась в память, но не работает. В чем может быть проблема? |
||||
|
|||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 1 Всего: 32 |
def файл с кодом примерно такого содержания я обычно прикомпилирую.
Посмотри на свою таблицу импорта. Может там и нету этих функций... -------------------- ![]() |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Verus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 5.8.2008 Репутация: нет Всего: нет |
Cheloveck, да у меня точно такой же файл
![]() jonie, потому что я прописываю в автозапуск и вывод сообщения не единственное что она должна делать.там по идее бесконечный цикл у меня. |
|||
|
||||
Verus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 5.8.2008 Репутация: нет Всего: нет |
В общем сейчас ситуация такая: dll загружается и работает, но не вызывается функция DllRegisterServer() где мне необходимо было вызвать:
тогда другой вопрос - как мне вызвать CoCreateInstance() из dll или это невозможно? |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
А с чего DllRegisterServer должна вызываться в автомате? Ее зовет только regsvr32
|
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 1 Всего: 32 |
Ты не путай CoCreateInstance создаёт объект, а DllRegisterServer() - просто регит классы в системном реестре, один раз
-------------------- ![]() |
|||
|
||||
Verus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 5.8.2008 Репутация: нет Всего: нет |
Да я не путаю, просто мне необходимо вызвать CoCreateInstance как-то. |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Ну так и вызывай из DllMain, какие проблемы ? Только не забудь CoInitialize позвать. Хотя нет, проблемы будут (MSDN):
|
||||||
|
|||||||
Verus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 5.8.2008 Репутация: нет Всего: нет |
Пытаюсь создать поток, но надо ограничить чтобы был поток только один:
Но почему-то тут поток не впадает в бесконечный цикл. Точнее впадает, но потоков создается куча, хотя так не должно быть. Т.к. в поток передаю глобальную переменную. Это сообщение отредактировал(а) Verus - 9.6.2009, 08:52 |
|||
|
||||
Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
Извините, не проснулся.
![]() Это сообщение отредактировал(а) Andrey44 - 9.6.2009, 14:21 -------------------- ????? ??, ??????? ?????. ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
запускай поток при fdwReason == DLL_PROCESS_ATTACH
раз он должен быть бесконечный, то на DLL_PROCESS_DETACH все равно придется завершиться в данном процессе и начать по-новой в другом (на следующий DLL_PROCESS_ATTACH), если таковые будут а для нескольких одновременно запущенных процессов создавай простой именованый мьютекс и распространяй владение им между DLL_PROCESS_ATTACH и DLL_PROCESS_DETACH, работать в таком случае всегда будет только один поток -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Код делает непонятно что ![]() Во первых он явно не считает количество своих вызовов, т.к. счетчик count у него локальный Во вторых, он зацикливается и фигачит в бедный 'D:\log.txt' до переполнения диска В третьих вообще не ясно как он создается (да и терминировать его тоже желательно, GremlinProg абсолютно правильно заметил) В четвертых, а нельзя ли вообще обойтись без dll? Автозапуск обычно все же на .exe делают, автозапустить .dll без извратов (типа rundll32) вообще невозможно Добавлено через 2 минуты и 41 секунду Кстати, вопрос вдогонку - зачем создавать IE при запуске? Он скорее всего не заработает, ему нужно много чего для работы, что появится только после ПОЛНОЙ раскрутки залогиненного пользователя. |
||||
|
|||||
Verus |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 5.8.2008 Репутация: нет Всего: нет |
А можно чуток поподробней как это сделать? Я делаю примерно так:
Но так в бесконечный цикл не впадает. Чего-то я не понял как сделать с мьютексами :( Добавлено через 8 минут и 17 секунд Ну тут можно ведь поставить какой нить Sleep() и подождать пока нормально загрузится все. А вообще нужно именно длл, с ехе все получается без проблем и работает. |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
тогда счетчики в потоке не нужны, но данные, которые поток генерирует (если он это делает), должны быть переданы в другой процесс на DLL_PROCESS_DETACH, чтобы поток всякий раз не начинал работу с нуля хотя это и не так интересно, перекидывать свою работу из процесса в процесс, гораздо проще все таки все это делать в своем собственном процессе (без длл) xvr, верно подметил, длл все таки обычно используют пассивно, слейвом, т.е. без ее собственной инициативы, к чему такие навороты, Verus? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |