| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Внедрение DLL |
| Автор: a.S.d 14.3.2005, 01:51 | ||||
| Я внедряю длл в чужой процесс. В длл код, который должен отсылать почту. Но почему-то ничего не отсылается(если сделать просто приложение, то отсылка работает). Вот код, внедряющий длл:
Сама длл:
В чём тут дело? |
| Автор: a.S.d 14.3.2005, 02:13 |
| Причём запарывается на smtp.Connect(100000); почему-то. |
| Автор: a.S.d 15.3.2005, 00:18 |
| Как выяспилось в библиотеке не работает всё, что связано с сетью, даже просто соединение сокетов, не зависимо от того какой процесс её подгружает. Как сделать чтоб отправка работала? |
| Автор: oleg1973 15.3.2005, 01:22 |
| я вообще удевляюсь как оно у тебя работает фактически ты просто впихиваеш длл в процесс,даже не как длл а как просто кусок кода, без учета специфики загоузки РЕ файлов в винде, тамже нада импорты заполнить да и секции раскидать по своим местам |
| Автор: p0s0l 15.3.2005, 01:58 | ||
Дык вроде у него судя по коду всё-таки DLL подгружается к чужому процессу... CreateRemoteThread "вызывает" LoadLibrary ('c:\testlib.dll')... А в DLL при подключении делаются свои дела... Delphi нормально должна компилить DLL, с импортами и секциями... Или ты про что ?... |
| Автор: RA 15.3.2005, 06:18 |
| А причём тут внедрение? проблема там где ты пытаешься отправить почту, тот код отправки сам посебе вобще работоспобен? и что за smtp.Connect(100000); ? у моих индейцев такого вообще нет, просто smtp.Connect; (может у меня старая версия индейцев) Добавлено @ 06:21 Кстати есть такаой компонент CTRLSOCK (не VCL) специально для таких целей. http://tothpaul.free.fr/zip/CRTSOCK.ZIP |
| Автор: a.S.d 15.3.2005, 09:28 |
| RAdmin Код работоспособен, я же написал что если сделать приложение а не библиотеку, то всё работает. |
| Автор: RA 15.3.2005, 10:15 |
| a.S.d Ладно тогда покажи полный код того как ты внедряешь DLL. |
| Автор: oleg1973 15.3.2005, 11:26 | ||
вся фигня в том что после этого куска что происходит? выполнив LoadLibrary треад заканчивает свою работу и соответственно автоматом выгружается либа я думаю тут косяк |
| Автор: RA 15.3.2005, 11:35 |
| Знач, после этого куска нужно вставить WaitForSingleObject(Thread,INFINITE); |
| Автор: Girder 15.3.2005, 13:00 | ||||||||
PS: Если не хочеш по паролю и все такое... то береш нужный тебе домен к примеру newmail.ru и через DNS определяеш Mail сервера (IdDNSResolver.QueryRecords:=[qtMX]) для данного адресса и пытаешся послать письмо через полученные Mail сервера(в ентом случаи smtp.AuthenticationType:=atNone). |
| Автор: RA 15.3.2005, 13:27 | ||
Я просто имел в виду это:
|
| Автор: Girder 15.3.2005, 15:41 | ||
PS: a.S.d не забудь выгружать библиотеку |
| Автор: a.S.d 15.3.2005, 16:54 | ||
Всем спасибо, всё работает, проблема была здесь:
|
| Автор: a.S.d 16.3.2005, 21:49 |
| Ещё вопрос: почему приложение, которое подгружает библиотеку, всё время виснет, ведь библиотека работает независимо от приложения? Как этого избежать? Girder А как её выгружать? Надо опять писать в память процесса процедуру выгрузки? |
| Автор: Girder 17.3.2005, 02:42 | ||||
|
| Автор: p0s0l 17.3.2005, 10:47 | ||||
|
| Автор: Girder 17.3.2005, 12:43 | ||||||
Главное помнить енто:
Т.o:
PS: Можеш в меня камнем... бросить - если я ошибаюсь |
| Автор: p0s0l 17.3.2005, 12:49 |
| А ну ты так... а я про другое подумал |