Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Путаница с TSockAddr и PSockAddr 
V
    Опции темы
ASGDeveloper
Дата 22.8.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

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



Есть у меня два заголовочных файла - для WinSock и WinSock 2.
В одном для функции connect используется TSockAddr, во втором - PSockAddr.
Моя прога перехватывает запросы на соединение и перенаправляет трафик на порт-маппер. При модификации SockAddr для wsock32.dll работают оба варианта:
1) SockAddr._переменная_
2) SockAddr^._переменная_

Для ws2_32.dll - аналогично.

Почему?  smile
PM MAIL   Вверх
Snowy
Дата 23.8.2006, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



PSockAddr, как видно из названия - это указатель на TSockAddr.
Просто физически варовские переменные - это указатель.
Поэтому, если для API функции создать описание с var, то нужно её передавать переменную, а не указатель - функция сама превратит его в указатель.
Если она без вара, то нужно передавать указатель.
Далее.
Если функция с варом, но передаём ей указатель, то он автоматически преобразуется компилятором в переменную. Поэтому можно указывать, как переменную, так и указатель на неё.
Подобное поведение компилятора широко используется в библиотеке KOL. В которой все объекты - это указатели, но обращение к ним идёт, как к переменным - компилятор автоматом перетранслирует это в "правильный" код.

Добавлено @ 00:28 
Пример:
TPoint.X идентично PPoint.X, хотя правильно было бы написать PPoint^.X.
Но компилятор распознаёт такое поведение и транслирует его, т.к. понимает, что обращение к полям указателя - нереально, и программист имел ввиду поле объекта/структуры, на которую указывает указатель.
PM MAIL   Вверх
ASGDeveloper
Дата 23.8.2006, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

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



Большое спасибо за пояснение. Вопрос закрыт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

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


 




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


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

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