Тема: Использование Delphi SDK for KolibriOS 2020-05
Приветик! Зашёл к вам только из-за Delphi для KolibriOS. Пытаюсь его использовать, так сказать. Заметил, что не хило так обрезали модуль System. Отсюда вопрос: как теперь конвертировать строку в число и на оборот? Попытался использовать стандартную функцию Str. Компилятор пожаловался на отсутствие функций _StrLong и _Str0Long. Скопировал их из оригинального System. Всё откомпилировалось, но в Kolibri тестовая программа вместо числа (конвертированного в строку) выдала мусор. Видимо этим функциям нужен другой код для работы в Kolibri. Есть решение данной проблемы? P.S. В идеале, я так полагаю, нужно _StrLong и _Str0Long переписать. Да многое другое, хорошо бы. А то System пока выглядит очень скудным.
P.P.S. К стати, Колибри отлично работает с типом ShortString из Delphi. Пока это единственный "человеческий" способ использования строк в Колибри.
P.P.P.S. Да ёлы-палы! Как же всё урезано. Простая вещь, объединение строк: a:=a+'blabla' - не работает! Компилятор жалуется на отсутствие LStrFromString. Я вообще не понимаю, как можно писать хоть сколь нибудь серьёзные вещи. Да да же калькулятор не напишешь, поскольку обязательно потребуется конвертация строки в число.
Добавлено 2020-06-01 в 15:49
Яху! Нашёл на просторах интернета рабочий год для Колибри. Теперь можно в Delphi конвертировать строку в число:
function StrToInt(S:PKolibriChar):Integer;
label atoi,top,done;
asm
mov edx, S // our string
atoi:
xor eax, eax // zero a "result so far"
top:
movzx ecx, byte [edx] // get a character
inc edx // ready for next one
cmp ecx, '0' // valid?
jb done
cmp ecx, '9'
ja done
sub ecx, '0' // "convert" character to number
imul eax, 10 // multiply "result so far" by ten
add eax, ecx // add in current digit
jmp top // until done
done:
mov result, eax
end;
Проверил - работает без проблем. Протестировал пока только на целых положительных числах. Так как не знал, как вывести результат функции, то менял ей положение окна и "линейкой" замерял расстояние.
P.S. С отрицательными числами не работает - надо думать(