Привет всем !
Столкнулся с интересной задачей, пробую решить ее в рамках синтаксиса Clarion.
Идея в следующем. Есть некая внешняя функция (в "чужой" DLL), которая выполняет преобразование
строки InputString и возвращает результат как строку с бинрными данными
(соответсвенно тип данных cString для результирующей строки не подходит сразу).
Например RezultString = CodeString(InputString)
К глубокому сожалению - размер результирующе строки не возвращается ...
Соответсвенно вопрос: как можно объявить в Clarion строку неизвестного размера, получить результат
и узнать его размер ?
С ходу придумал два варианта, оба работают:
1. Объявляем файл TPS c полем BLOB. В поле BLOB "ловим" результат и уже далее его обрабатываем
(узнаем размер заполненного BLOB, объявляем динамическую строку нужного размера и в нее перепиываем
результат работу функции). Минус - нужен драйвер TopSpeed.
2. Получаем результат как параметр процедуры. Объявляем фукцию MyFunc(String) и выполняем
MyFunc(CodeString(InputString)). В этом случае внутри функции получаем параметр-строку, нужно длины
с заполненными данными. Минус - ограничение на длину строки в 4 MByte.
Второй вариант наводит на мысль, что внутри себя Clarion все-таки создает эту самую безразмерную строку
для получения результата, узнает ее размер и уже потом формирует область памяти для передачи параметра.
Как быть ? Возможны ли еще варианты решения такой задачи ?
Заранее спасибо за любую идею ....
Полный Unlimited ?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7332
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз