![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как использовать ф-цию bind?
ррра45 © (2003-02-18 19:31:00)А именно что такое PSockAddr:
function bind(const s: TSocket; const addr: PSockAddr; const namelen: Integer)
Получается поставить туда @v1 (v1: TSockAddr;)
Но возникает ошибка 10014. Сокет до этого нормально создается.
Digitman (2003-02-20 10:56:00) [1]да кто ж спорит ?) разумеется, WSAEFAULT=10014 возникает из-за несоответствия зн-я фактического параметра namelen требуемому размеру структуры SizeOf(TSockAddrIn) = SizeOf(TSockAddr), факт.адрес которой передается
Alex Konshin (2003-02-20 09:12:00) [2]Я знаю об этой разнице, но это же не повод чему-то не работать!
Понятно, что человек где-то запутался с указателями, но признаваться не хочет.
Я даже могу объяснить, почему я сделал именно так: просто помимо PSockAddr там вполне может быть PSockAddrNB, PSockAddrIPX и т.п.. Все-таки приведение одного типа указателя к другому более прозрачно, чем фиктивные разыменования в случае, если бы там был var.
Digitman (2003-02-20 08:45:00) [3]1.декларация в Winsock.pas :
function bind(s: TSocket; var addr: TSockAddr; namelen: Integer): Integer; stdcall;
2.декларация в Winsock2.pas :
function bind( const s: TSocket; const addr: PSockAddr; const namelen: Integer ): Integer; stdcall;
как видно из текста, объявление 2-го параметра несколько отличается (что, впрочем, непринципиально), но вариант с @v1 (v1: TSockAddr;) будет корректен лишь для декларации 2
для декларации 1 "баран" перед идент-ром V не нужен
Alex Konshin (2003-02-19 20:15:00) [4]А с каким не получалось-то? С моим что-ли?
Что не получается? Приведи код-то.
ррра45 (2003-02-19 14:56:00) [5]с другим модулем winsock всё получилось
Digitman (2003-02-19 11:45:00) [6]приведи полный код
ррра45 (2003-02-19 11:39:00) [7]Ну помогите!!!