Здравствуйте, BazaroffMA, Вы писали:
BMA>Снова мучаюсь с сокетами, не могу передать запись через сокет, вот мои класы и процедуры обработки:
BMA>класс и константы
BMA>BMA>const
BMA>cmdAuth = 1;
BMA>cmdMessage = 2;
BMA>cmdExit = 255;
BMA> type TNetPack = record
BMA> Cmd:byte;
BMA> UserID: ShortString;
BMA> Pswd: ShortString;
BMA> Param1:String;
BMA> end;
BMA>
BMA>Когда делаю сервер и клиент на одной форме все отлично работает, а если делаю клиент отдельно, то при авторизации все нормально а при приеме сообщения Accec violation
BMA>помогите разобраться
Да тут все просто: String — это довольно сложный класс, в частности, внутри него хранится указатель на данные строки. Когда ты передаешь record, содержащую String, то у тебя передается только указатель, а не сами данные. Когда читаешь record, то, естественно, считывается только указатель, если принимаешь и посылаешь данные в разных процессах то естественно происходит ошибка, т.к. указатель, полученный в одном процессе, не имеет совершенно никакого смысла в другом. Если на одной форме работает, то это просто случайность, что полученный указатель указывает на данные отправленной строки.
В общем, при пересылке данных надо быть осторожным, и не пересылать указатели. Вместо этого надо пересылать данные объекта, на которые указывает указатель, например, в виде массива байт.
... << RSDN@Home 1.2.0 alpha rev. 786>>