![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Доброго времени суток!
Имеется класс-наследник THTTPSend, для него требуется реализовать 3 базовых метода: GET, POST, HEAD, однако только эти 3 мне показалось малым кол-во и нужно сделать ещё удобнее... Код:
Код:
![]() Код:
SS - TStream |
![]() |
![]() |
![]() |
#2 |
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
![]() Код:
Будь проще и люди к тебе потянутся
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
ss - переменная TSTREAM.
А как тогда правильно сделать? Суть в том, что это все функции с булевым результатом, и некоторые должны вернуть данные. Может я вас не правильно понял? Типы out параметров разные, я специально сделал так, чтобы в конечном итоге получившийся класс был очень юзабелен, без собственных приворотных заморочек. Я не знаю почему компилятор не может распознать ситуацию. Код:
Последний раз редактировалось Человек_Борща; 10.11.2012 в 13:30. |
![]() |
![]() |
![]() |
#4 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Хм, ну сделать - то просто, в случае со строкой
Код:
Лучше создать поток до вызова функции, передать его в функцию (модификатор параметра , вроде var out не нужен, лучше const или без модификатора даже), функция его заполняет, после окончания функции пользуемся потоком, и прибиваем его. Булеан результаты функций тут не при чём, нет смысла их трогать. |
![]() |
![]() |
![]() |
#5 | ||
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
![]() Цитата:
Код:
Цитата:
И еще, Человек_Борща, все таки старайся передавать все входные параметры как const, а не так как у тебя в примере - без модификатора...
Будь проще и люди к тебе потянутся
Последний раз редактировалось spamer; 10.11.2012 в 16:05. |
||
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
phomm, spamer, смотрите
Есть методы: Код:
Код:
|
![]() |
![]() |
![]() |
#7 | |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]() Цитата:
передавая строку как вар или аут параметр, мы передаём указатель на строку, которая есть указатель на данные строки (ансистроки). Поскольку строка как переменная в подпрограмме локальная, то само значение переменной строки (указателя на данные строки) есть мусор со стека, передав этот мусор (или даже указатель на него) в другую подпрограмму, при попытке изменить данную строку для возврата результата, будет задействован автоматический механизм управления строками в дельфи, т.е. он из старого места (данные строки) попробует строку удалить, а для результата создаст новую строку (в куче) и указателю на строку присвоит адрес созданного блока памяти. Когда он попробует удалить строку по мусорной ссылке, то и может быть ав. Поэтому я и указал, что заниливаем чтобы не было этого, у нилового указателя - переменной пустой строки он не будет пробовать удалить "старую" память. Человек_Борща , я не знаю, как там в синапс ( я так понял Вы её используете), но один и тот же приём Result := HTTPMethod(...); для получения и строки и потока меня настораживает, советую сперва всё перепроверить, в том числе и по справке. Последний раз редактировалось phomm; 10.11.2012 в 23:02. |
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
У синапсов нет справки, только унылая техн. документация слизанная с исходников.
Я не пишу новый THTTPSend, я делаю навес над ним, расширяющий возможности. HTTPMethod - единственный метод отправки данных. Я меняю некоторые значения/устанавливаю новые, и вызываю стандартный HTTPMethod. Данные уходят/приходят нормально. Проблема с возвратом их куда-либо, не через результат функции(Функция возвращает успешность отправки данных вообще). |
![]() |
![]() |
![]() |
#9 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Ах, всё, дошло.. просто меня что-то смутило это...
Пока предположу, что после работы с потоком на чтение (в обоих функциях Get, ибо в обоих работа с потоком) его надо на начало перематывать. Последний раз редактировалось phomm; 10.11.2012 в 23:32. |
![]() |
![]() |
![]() |
#10 |
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
![]()
Насчет очищать/не очищать out-var параметры - можно посмотреть вот тут ответы.
Как-то так: Код:
Будь проще и люди к тебе потянутся
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
перегрузка методов класса (с++) | Antej | Общие вопросы C/C++ | 2 | 24.07.2012 17:58 |
Перегрузка виртуальных методов | mongolores | Общие вопросы Delphi | 27 | 14.05.2012 19:12 |
Ошибка в использовании методов класса | Jugger | Общие вопросы C/C++ | 2 | 26.10.2011 01:29 |
Вектор из callback'ов методов класса | Gongled | Общие вопросы C/C++ | 7 | 05.01.2011 16:29 |
массив методов класса | DartDayring | Общие вопросы C/C++ | 0 | 07.12.2010 20:00 |