![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
bind error [D7, WinXP]
Wiz@rd © (2005-10-12 11:53:00)При вызове функции bind в из заинекченной dll'ки происходит фатальная ошибка, хотя тот же самый код в обычной программе работает без сбоев. Пробовал WinSock и WinSock2
Digitman (2005-10-12 17:56:00) [1]
> atruhin © (12.10.05 17:19) [11]
нет, тут самое интересное другое - сей "фрукт" утверждает. что эта ( одна и та же!) лажа с разыменованием якобы работает в ехе-проекте, но якобы не работает в dll-проекте)
и при том , понимаете ли, "по делу" изволит требовать) ..
atruhin (2005-10-12 17:19:00) [2]Да господи! Ведь ошибку уже показали!
>> bind(sock, srv_address, SizeOf(srv_address))
>> Интересно, чему равен SizeOf(srv_address)?..
bind(sock, srv_address, SizeOf(srv_address))
Digitman (2005-10-12 13:59:00) [3]
> немогу протестить что там и почему т.к. исполняется это
> в dll, которая в чужом процессе
не ври.
никого тут не интересует, "чужой" или "свой" процесс, речь идет о работоспособности твоего кода в ЛЮБЫХ предполагаемых тобой условиях.
сделай тестовое приложение (свое), вызови там свою ф-цию из своей же ДЛЛ и трассируй/тестируй/отлаживай ее вдоль и поперек !
Wiz@rd (2005-10-12 13:44:00) [4]Я немогу протестить что там и почему т.к. исполняется это в dll, которая в чужом процессе, exception просто говорит адрес ошибки и всё
Digitman (2005-10-12 13:01:00) [5]
> дело именно в bind
вот и рассказывай давай, что там за "дело" - выполняется ф-ция до конца или крах процесса происходит именно вов ремя выполнения ф-ции при таком-то по порядку ее вызове.
Wiz@rd (2005-10-12 12:55:00) [6]SizeOf (srv_address^));
с этим проблем нет, дело именно в bind
Владислав (2005-10-12 12:53:00) [7]
> bind(sock, srv_address, SizeOf(srv_address))
Интересно, чему равен SizeOf(srv_address)?..
Digitman (2005-10-12 12:44:00) [8]
> Wiz@rd (12.10.05 12:42) [4]
я тебе задал вопросы, от ответа на которые немало зависит и решение.
так что "просьба отвечать по делу", а не лить воду про какие-то ДЛЛ ..
API-ф-ция - она и в Африке API-ф-ция.
Wiz@rd (2005-10-12 12:42:00) [9]Дело в специфики приложения: если это юзать в обычной проге то всё ok, другое дело в dll которую заинектил
Digitman (2005-10-12 12:33:00) [10]
> Просьба отвечать по делу
ну прямо таки прокурор)
ты справку читал ?
For TCP/IP, if the port is specified as zero, the service provider will assign a unique port to the application with a value between 1024 and 5000
и к чему эти выкрутасы с циклом ?
система и без них найдет своб.порт в упомянутом диапазоне.
вероятность того, что в этом диапазоне не найдется нит одного своб.порта, весьма и весьма мала.
> вот тут при использовании в dll процесс приходит к аварийному
> завершению
с каким же сообщением ?
хочешь сказать, что "крах процесса" происходит при первой же попытке вызова bind() и до возврата из этой ф-ции даже и дело не доходит ?
Wiz@rd (2005-10-12 11:59:00) [11]function FindBindPort: Word;
var
i: Word;
srv_address: PSockAddr;
sock: TSocket;
begin
Result := 0;
sock := socket(AF_INET, SOCK_STREAM, 0);
if sock = INVALID_SOCKET then
Exit;
GetMem (srv_address, SizeOf (srv_address^));
ZeroMemory (srv_address, SizeOf (srv_address^));
srv_address.sin_family := AF_INET;
srv_address.sin_addr.s_addr := INADDR_ANY;
for i := gPortRange.First to gPortRange.Last do
begin
srv_address.sin_port := htons(i);
if bind(sock, srv_address, SizeOf(srv_address)) <> SOCKET_ERROR then {вот тут при использовании в dll процесс приходит к аварийному завершению}
begin
closesocket(sock);
Result := i;
Exit;
end;
end;
end;
ЗЫ. Просьба отвечать по делу
Digitman (2005-10-12 11:55:00) [12]
> происходит фатальная ошибка
это какая же ?
> Пробовал WinSock и WinSock2
попробуй еще WinSock3..WinSock354634343543 ... как только появятся) ..
или таки сподобься уже ДЕТАЛЬНО описать проблему.