Полный Unlimited ?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Полный Unlimited ?

Сообщение Игорь Столяров »

Привет всем !

Столкнулся с интересной задачей, пробую решить ее в рамках синтаксиса Clarion.
Идея в следующем. Есть некая внешняя функция (в "чужой" DLL), которая выполняет преобразование
строки InputString и возвращает результат как строку с бинрными данными
(соответсвенно тип данных cString для результирующей строки не подходит сразу).
Например RezultString = CodeString(InputString)

К глубокому сожалению - размер результирующе строки не возвращается ...
Соответсвенно вопрос: как можно объявить в Clarion строку неизвестного размера, получить результат
и узнать его размер ?

С ходу придумал два варианта, оба работают:

1. Объявляем файл TPS c полем BLOB. В поле BLOB "ловим" результат и уже далее его обрабатываем
(узнаем размер заполненного BLOB, объявляем динамическую строку нужного размера и в нее перепиываем
результат работу функции). Минус - нужен драйвер TopSpeed.

2. Получаем результат как параметр процедуры. Объявляем фукцию MyFunc(String) и выполняем
MyFunc(CodeString(InputString)). В этом случае внутри функции получаем параметр-строку, нужно длины
с заполненными данными. Минус - ограничение на длину строки в 4 MByte.

Второй вариант наводит на мысль, что внутри себя Clarion все-таки создает эту самую безразмерную строку
для получения результата, узнает ее размер и уже потом формирует область памяти для передачи параметра.

Как быть ? Возможны ли еще варианты решения такой задачи ?
Заранее спасибо за любую идею ....
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить