Вверх ↑
Этот топик читают: Гость
Ответов: 203
Рейтинг: 2
#1: 2015-12-01 19:28:15 ЛС | профиль | цитата
Добрый день!
Прошу помощи сообщества в следующем вопросе. Есть ОЧЕНЬ необходимый для меня код, который работает в Дельфи. Он нужен для взаимодействия с довольно закрытой но очень необходимой системой для меня. Пробую перенести в IC. И тут ошибка при объявлении общих переменных. Что я делаю не так ?

code_36588.txt
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#2: 2015-12-01 20:48:14 ЛС | профиль | цитата
kaban4ik,
Белое солнце пустыни. писал(а):
- Гюльчатай, открой личико. А ?
Куда код спрятал ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 203
Рейтинг: 2
#3: 2015-12-01 21:08:43 ЛС | профиль | цитата
Не понятно. Честное пионерское...

code_36589.txt
карма: 0

0
файлы: 1code_36589.txt [4KB] [580]
Ответов: 16884
Рейтинг: 1239
#4: 2015-12-01 23:16:30 ЛС | профиль | цитата
kaban4ik писал(а):
Пробую перенести в IC.
Исходник где найти ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 203
Рейтинг: 2
#5: 2015-12-01 23:29:23 ЛС | профиль | цитата
Так он в IC загружен... Вот приложил исходник

code_36590.txt
карма: 0

0
файлы: 1code_36590.txt [1.9KB] [556]
Ответов: 4630
Рейтинг: 749
#6: 2015-12-02 11:57:28 ЛС | профиль | цитата
code_36595.txt
карма: 26

0
файлы: 1code_36595.txt [2KB] [703]
Ответов: 203
Рейтинг: 2
#7: 2015-12-02 12:40:40 ЛС | профиль | цитата
Netspirit, спасибо что посмотрели мой файл. Насколько позволяют мне мои знания вы переместили массив mass в переменную типа строка S. Но вызов внешней функции требует именно массив байт типа TByteDynArray;. Так же вопрос открыт наверно.
карма: 0

0
Ответов: 4630
Рейтинг: 749
#8: 2015-12-02 13:04:35 ЛС | профиль | цитата
А зачем преобразовывать в Base64?
карма: 26

0
Ответов: 203
Рейтинг: 2
#9: 2015-12-02 13:30:23 ЛС | профиль | цитата
Netspirit, что бы уменьшить размер передаваемых данных. Потом это ложиться в базу данных. Только я не уверен что там "настоящий" Base64. Это для меня закрытая система, мне дали только туда доступ.
карма: 0

0
Ответов: 4630
Рейтинг: 749
#10: 2015-12-02 13:41:02 ЛС | профиль | цитата
То-есть, данные должны быть преобразованы в Base64 перед тем, как будут занесены в массив mass2, а затем этот массив подаётся дальше?

Потому, что, судя по твоему исходнику, преобразование в Base64 нужно только для того, чтобы вывести в консоль. И кроме этого преобразования больше никаких внешних функций не вызывается. То, что идёт после "// Начало основной программы" звучит так:
- заполнить массив из 48 чисел типа Extended
- поместить его в другой массив типа "массив байтов"
- преобразовать этот другой массив в кодировку Base64 и вывести в консоль

Конечно, если client.Encode64() - это преобразование только в Base64, а не какое-то другое. Название функции EncodeBase64 как-бы говорит об этом.

карма: 26

0
Ответов: 203
Рейтинг: 2
#11: 2015-12-02 17:00:59 ЛС | профиль | цитата
Netspirit писал(а):
Конечно, если client.Encode64() - это преобразование только в Base64, а не какое-то другое. Название функции EncodeBase64 как-бы говорит об этом.

1. заполнить массив из 48 чисел типа Extended.
2. поместить его в другой массив типа массив байт.
3. передать массив через функцию client.Encode64() из сторонней библиотеки (через OLE если память не изменяет) Client_ADO.ClassA. Хоть там и написано Base64 там совсем не разу не Base64. А может ее какая реализация, но я об этом не знаю.
4. Получить строку. Работать дальше со строкой я уже умею.
карма: 0

0
Ответов: 4630
Рейтинг: 749
#12: 2015-12-02 18:10:49 ЛС | профиль | цитата
Вот как объявить и заполнить тот массив: code_36597.txt Пробуй подавать в те твои функции.
карма: 26

0
файлы: 1code_36597.txt [1.1KB] [657]
Ответов: 203
Рейтинг: 2
#13: 2015-12-04 16:57:27 ЛС | профиль | цитата
Спасибо Netspirit, , благодаря Вашим подсказкам сильно продвинулся вперед к решению своей проблемы.

Вот код который работает и в Delphi 7 и в Lazarus 1.4.
code_36603.txt

но совершенно отказывается работать в IC Hiasm, т.е. ехе собирается, запускается и при вызове функции ошибка (исключение).
Если закомментировать строку s := client.Encode64(VarArrayRef (mass2), error); то программа не падает в ошибку. Если написать s := client.Encode64(mass2), error); то программа дальше работает но нет закодированных данных. Чувствую что осталось всего пол шага до решения проблемы... Но Куда ?
карма: 0

0
файлы: 1code_36603.txt [286B] [552]
Ответов: 4630
Рейтинг: 749
#14: 2015-12-04 17:37:15 ЛС | профиль | цитата
То-есть, ты вытащил код из функции CallToLib и подаешь массив сразу после заполнения?
Ты не можешь просто подать mass2 на client.Encode64().
Там в функции EncodeBase64 на основе твоего mass2 создается ещё один массив, совместимый с типом Variant, а уже он подаётся на client.Encode64()

code_36604.txt
карма: 26

1
файлы: 1code_36604.txt [772B] [674]
Голосовали:kaban4ik
Ответов: 203
Рейтинг: 2
#15: 2015-12-04 18:05:10 ЛС | профиль | цитата
Netspirit, УРА!!!!!!!!!!!!!!!!!!!!!

Тестовый пример и тот что вы дали - все данные сошлось!!!!! Огромное Вам спасибо.
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)