Страница 1 из 1

Полный Unlimited ?

Добавлено: 25 Август 2008, 11:50
Игорь Столяров
Привет всем !

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

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

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

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

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

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

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