Получить из Procedure() то, сам не знаю что ....
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Получить из Procedure() то, сам не знаю что ....
Привет всем !
Возникло непреодолимое желание получить ответ на еще один детский вопрос.
Нужна процедура, которая загружает из интернет в строку (память) некий объем информации и возвращает указатель на эту строку.
Проблема в том, что на момент вызова процедуры, я не знаю какой объем информации будет загружен по переданной в нее ссылке.
1. В процедуре через NEW() создаем динамическую строку и загружаем в нее информацию.
Знаем объем загруженной информации и есть указатель на строку с этой информацией.
2. Как вернуть эти данные в точку вызова процедуры ?
Существует явный запрет на изменения адреса параметра процедуры типа *String
Т.е. я не могу переключить параметр-адрес и вернуть из процедуры указатель на строку.
3. Эксперименты с типом параметра процедуры *?, ANY, Signed и передача в них адреса строки - не получились.
Это в принципе невозможно или можно решить вопрос через какую-то хитрую игру с адресами строк ?
Зачем тогда вообще тип возвращаемого параметра Proc(),*String ?
4. Можно создавать строку в GLOBAL DATA - но это не удобно для Multi DLL приложений.
5. Сейчас вопрос решается следующим образом:
- В процедуре по ссылке загружаю информацию в ФАЙЛ и возвращаю имя файла;
- По размеру файла создаю строку и загружаю из него информацию в память;
- Удаляю файл.
Все работает. Но это же бред ...
Заранее спасибо за любые идеи.
Возникло непреодолимое желание получить ответ на еще один детский вопрос.
Нужна процедура, которая загружает из интернет в строку (память) некий объем информации и возвращает указатель на эту строку.
Проблема в том, что на момент вызова процедуры, я не знаю какой объем информации будет загружен по переданной в нее ссылке.
1. В процедуре через NEW() создаем динамическую строку и загружаем в нее информацию.
Знаем объем загруженной информации и есть указатель на строку с этой информацией.
2. Как вернуть эти данные в точку вызова процедуры ?
Существует явный запрет на изменения адреса параметра процедуры типа *String
Т.е. я не могу переключить параметр-адрес и вернуть из процедуры указатель на строку.
3. Эксперименты с типом параметра процедуры *?, ANY, Signed и передача в них адреса строки - не получились.
Это в принципе невозможно или можно решить вопрос через какую-то хитрую игру с адресами строк ?
Зачем тогда вообще тип возвращаемого параметра Proc(),*String ?
4. Можно создавать строку в GLOBAL DATA - но это не удобно для Multi DLL приложений.
5. Сейчас вопрос решается следующим образом:
- В процедуре по ссылке загружаю информацию в ФАЙЛ и возвращаю имя файла;
- По размеру файла создаю строку и загружаю из него информацию в память;
- Удаляю файл.
Все работает. Но это же бред ...
Заранее спасибо за любые идеи.
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Получить из Procedure() то, сам не знаю что ....
1. А какие проблемы, если возвратить просто String? Есть разве ограничение на размер возвращаемой строки?
2. Адрес можно передать через заголовок. А в процедуре попробовать сделать переадресацию, что-ли.
3. Попробовать возвратить CString, в хелпе написано, что компилятор понимает этот тип как "char *", надо думать что-то типа адреса.
2. Адрес можно передать через заголовок. А в процедуре попробовать сделать переадресацию, что-ли.
3. Попробовать возвратить CString, в хелпе написано, что компилятор понимает этот тип как "char *", надо думать что-то типа адреса.
We are hard at work… for you.
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Получить из Procedure() то, сам не знаю что ....
Если читаешь блоками через InternetReadFile то что мешает воспользоваться IDynStr из LibSrc\DYNSTR.INC
По идее для класса все равно что ты туда закинешь байты или символы.
Или я не о том?
По идее для класса все равно что ты туда закинешь байты или символы.
Или я не о том?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Получить из Procedure() то, сам не знаю что ....
1. Возвратить из процедуры STRING проблем нет. А куда я ее получу, если не знаю длину возвращаемой строки ?
2. Вот и я пытаюсь найти это "что-ли", но пока результата нет.
3. Идею с CString отбрасываем сразу, т.к. загружаемые данные могут иметь бинарную структуру (например картинки) и содержать "<0>".
2. Вот и я пытаюсь найти это "что-ли", но пока результата нет.
3. Идею с CString отбрасываем сразу, т.к. загружаемые данные могут иметь бинарную структуру (например картинки) и содержать "<0>".
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Получить из Procedure() то, сам не знаю что ....
Не о том. Динамически расширяющуюся строку для загрузки в нее произвольного кол-ва блоков данных я могу и сам создать, это не сложно.
Вопрос в том как вернуть из процедуры адрес этой строки ...
За теми кто отстал - не возвращаться. (С) Кодекс
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Получить из Procedure() то, сам не знаю что ....
Обязательно строки?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Получить из Procedure() то, сам не знаю что ....
Глупый вопрос. Понял...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Получить из Procedure() то, сам не знаю что ....
Нет. Некий массив данных. Строка удобна: в ней можно искать (парсить если текст), можно сохранить в файл и т.д.Admin писал(а):Обязательно строки?
Можно конечно грузить загруженные блоки в очередь, а потом из них формировать строку - но это слабо отличается от существующего решения с файлом ....
За теми кто отстал - не возвращаться. (С) Кодекс
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Получить из Procedure() то, сам не знаю что ....
Чем читаешь файл из инета, какими процедурами?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Получить из Procedure() то, сам не знаю что ....
Если InternetReadFile то воспользуйся HttpQueryInfo
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Получить из Procedure() то, сам не знаю что ....
InternetReadFile(Loc:hUrl,Loc:Buffer,Loc:Buffersize,Loc:BufferLength) - просто передрал столетний пример WEBCOPY с сайта CLARIONLIFE.
За теми кто отстал - не возвращаться. (С) Кодекс
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Получить из Procedure() то, сам не знаю что ....
HttpQueryInfo
И вообще сюда смотрим: https://msdn.microsoft.com/ru-ru/librar ... s.85).aspx
Много чего интересного есть.
И вообще сюда смотрим: https://msdn.microsoft.com/ru-ru/librar ... s.85).aspx
Много чего интересного есть.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Получить из Procedure() то, сам не знаю что ....
Нет никаких проблем тем или иным способом загрузить строку в память по ссылке.
Проблема в том, как вернуть эту строку из процедуры в Clarion, если он не хочет возвращать из процедуры адрес этой строки ...
За теми кто отстал - не возвращаться. (С) Кодекс
Получить из Procedure() то, сам не знаю что ....
Хмм. А мои классы CHTTP и CSTR не прокатят? Они вроде как для этого, в том числе и создавались... Класс CHTTP может грузить файл в память и возвращать как раз ссылку на строку. А CSTR работает с длинными строками, но хранит их в обычном String (или Cstring, если надо)
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Получить из Procedure() то, сам не знаю что ....
Упс ! Похоже, что я опять пытаюсь изобрести колесо ...
Скажите пожалуйста, а где можно их загрузить и посмотреть ?
За теми кто отстал - не возвращаться. (С) Кодекс