четверг, 30 октября 2014 г.

Как меня проперли* в новой версии FreeBasic

Узнал, что вышла новая версия 1.0.0 одного из крутейших компиляторов Basic'a, на котором у меня есть ряд небольших программ, ну и дернуло меня обновиться.
С недоумением обнаружил, что всё либо перестало компилироваться, либо даёт неверные результаты.
Причём никаких намеков компилятор не давал, что бы это значило, поэтому пришлось обращаться на форум.

Первая проблема заключалась в том, что перестали работать фунции, в параметрах которых было выражение ByVal as String. В changelog на эту тему мне очень понравилось выражение:
"BYVAL AS STRING is now working properly*" Вот это вот properly звучало восхитительно. Проект не работает, а у них теперь зато всё правильно. Оказалось, что теперь нужно писать по-другому: ByRef as ZString. Может я конечно тупой ламер, но такая замена не кажется очевидной совсем, и уж никак она  не напоминает родной Basic.

Вторая проблема - ошибка соответствия типов на простой, казалось бы, конструкции получения значения текстового поля БД из библиотеки sqlite3.dll

Ранее работоспособный код выглядел так:
Dim as String TextField ' объявляем строковую переменную
TextField = *sqlite3_column_text(sql_stat,5) ' присваиваем переменной содержимое текстового поля

На форуме дают ответ, теперь, оказывается надо писать так:
 

Dim as String TextField
TextField = *cast(ZString Ptr, sqlite3_column_text(sql_stat,5)) 

я бы ни за что не догадался. Это невозможно понять, это нужно запомнить! :)
blog comments powered by Disqus