Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 17:56

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 108 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
Автор Сообщение
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Пт дек 10, 2010 16:24 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Сейчас пытаюсь писать библиотеку (fqt) оберток для QT, которую использую с SPF. В качестве проверки (ну и пользы) на базе этой библиотеки (fqt.dll и fqt.so) делаю графическую консоль (console.f). Текст console.f един и для Win и Linux.

Исходники для Winows: http://mgw.narod.ru/spfqt_win.zip
Исходники для Linux: http://mgw.narod.ru/spfqt_linux.zip

Сейчас для вызова метода приходится писать функцию обертку в fqt.dll Я же хочу
вызывать методы из библиотеки напрямую с форта, тем самым сократив работу с C++ до минимума.

В архив для Win доложил файл f++.f демонстрирующий проблему вызова метода.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Ср дек 15, 2010 16:05 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Mihail писал(а):
Сейчас для вызова метода приходится писать функцию обертку в fqt.dll Я же хочу
вызывать методы из библиотеки напрямую с форта,

fqt.dl весит 224 КБ. Не думаю, что в основном, там все лишнее.(хотя сишники о памяти не думают)

В spfqt_linux что-то некорректно. Я нашел функции в fqt.so.2.0.0 зависящие от уровня стека возвратов.
В spfqt_linux.zip/console.f есть строка
Код:
if=L   0 ARGV ARGC 3 aQT_App CDECL-CALL APP !  // Инициализация QT

Для функции QT_App достаточно 2 параметра. Ноль кладется ради изменения уровня стека.
С тем-же успехом будет работать:
Код:
if=L   DUP >R  ARGV ARGC 2 aQT_App CDECL-CALL APP !  RDROP  // Инициализация QT


Причем, RDROP можно перенести в любое место до
Код:
wc1 show CDECL-CALL DROP


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт дек 16, 2010 17:54 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Mihail писал(а):
В spfqt_linux что-то некорректно. Я нашел функции в fqt.so.2.0.0 зависящие от уровня стека возвратов.


Я положил в архивы и исходники fqt.so.2.0.0 на C++. Там вроде нет ни чего зависящего от стека возвратов. А более подробно уточнить можно? Возможно ключи компиляции gcc влияют на это?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт дек 16, 2010 18:31 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
mgw писал(а):
Возможно ключи компиляции gcc влияют на это?

Вряд ли. По моему, это следствие какогото
некоректного вызова fqt.so.2.0.0. В любом случае,
сперва следует упростить фортовскую программу.
Постепенно, периодически проверяя наличие данной ошибки.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Пт дек 17, 2010 10:44 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Пытаюсь найти причину краха SPF-Linux при вызове методов QT. Делал трассировку вызовов с помощью gdb. Программа валится в glibc на строчных функциях .... Точно ясно, что дело не в вызове, т.к. я пробовал заменить вызов CDECL-CALL (ассемблер) на
C-EXEC (nf.f форт). Ошибка сохраняется :(
Есть мысль попробовать другой форт SPFOPT ANS FORTH 94 for Linux как он будет отрабатывать этот вызов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Пт дек 17, 2010 23:35 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Mihail писал(а):
В spfqt_linux что-то некорректно. Я нашел функции в fqt.so.2.0.0 зависящие от уровня стека возвратов. В spfqt_linux.zip/console.f есть строка

Код:if=L   0 ARGV ARGC 3 aQT_App CDECL-CALL APP !  // Инициализация QT


Проверил fqt.so.2.0.0 c VfxForth for Linux. Таже функция, что и выше (aQT_App) работает с двумя
параметрами, как и должно быть ... Чудеса ... Вернее что SPF что то замешивает ...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Сб дек 18, 2010 18:42 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Mihail писал(а):
В spf-4.20 KEY и KEY? не работает
у меня работает http://fpauk.narod.ru/ubuspf.tar.gz


Работает, просто вынесено в либу :
Код:
$ spf
SP-FORTH - ANS FORTH 94 for Linux
Open source project at http://spf.sf.net
Russian FIG at http://www.forth.org.ru ; Started by A.Cherezov
Version 4.20 Build 696 at 26.Sep.2009

lib/posix/key.f
Ok
KEY
Ok ( 115 )

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Вс дек 19, 2010 12:24 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
ygrek писал(а):
Работает, просто вынесено в либу


KEY? не работает


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Вс дек 19, 2010 14:52 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Да, верно..

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Пн дек 20, 2010 11:23 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
mgw писал(а):
Проверил fqt.so.2.0.0 c VfxForth for Linux.


VfxForth в исходниках есть? Что-то мне не найти.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Вт дек 21, 2010 19:16 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Исходников VfxForth у меня нет. Просто на нем пытался вызывать функции из fqt.so.2.0.

Я понял, почему не удавалось нормально взаимодействовать с функциями Qt.
Вызывать отдельно из SPF инициализацию Qt, потом создание виджетов и т.д.
предполагает неизменность EBP (мне так кажется, не зря во всех примерах они в рамках
одной функции вызываются). С SPF создать вызовы с единым EBP не получается (отсюда зависимость
от вложенности при вызовах функций Qt).
Я изменил алгоритм. С SPF вызываю функцию C++ приблизительно такого содержания:

Код:
void *sav;

extern "C" FQT_API  int QT_AppD(int qargc, char *qargv[], void *adrf) {
   sav = (void *)new QApplication(qargc, qargv);
   
   __asm__("push %ebp");   // Пролог функции т.к. spf меняет значение EBP, а это не допустимо

   ((ExecZIM_1_0)adrf)((void *)sav);   // Вызвать CALLBACK spf по адресу adrf

   __asm__("pop %ebp");    // Востановить EBP
   
   ((QApplication *)sav)->exec();    // Начать обработку графических событий
   return  0;
}


и уже в CALLBACK определять новые виджеты. Таким образом EBP при вызове между new QApplication и QApplication->exec() не меняется.

Всё нормально заработало. :)

Пример создать окно и отобразить его:
Код:
fQWidget NEW окно1   \ Подготовить объект SPF (выделить место)
окно1 create                \ Вызвать конструктор
окно1 show                  \ отобразить окно на экране


При входе в CALLBACK надо сохранять EBP, а на выходе восстанавливать. Нужен пролог и эпилог функции.

Интересно в SPF такое стандартное поведение CALLBACK есть?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Вс дек 26, 2010 23:28 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Если кто работает с Linux, проверьте работает ли графическая консоль ( SPF 4.20 + Qt ).
Ссылка на программу: http://narod.ru/disk/2215519001/console_SPFQT.zip.html


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Пн дек 27, 2010 02:56 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
EXCEPTION! CODE:0000000B ADDRESS:B7DD898A WORD:<?not found>
USER DATA: B7D17B18 THREAD ID: B7E54AE0 HANDLER: 00000000
[Ошибка сегментирования] Code:1 At:00000001
STACK: (269659772) 00000002 0812D7F8 0812C788 B7D17B18 B7AC0958 BFB54634 [000000
01]
RETURN STACK:
END OF EXCEPTION REPORT
UNHANDLED EXCEPTION: FFFFFFF7
RETURN STACK:
BFB532D0 : 08053007 CATCH
BFB532D4 : 00000000
BFB532D8 : BFB54294
BFB532DC : 0805B5ED FATAL-HANDLER1
BFB532E0 : 08052F98 THROW
BFB532E4 : 0805BB15 (errsignal)
BFB532E8 : 08051E79 _WNDPROC-CODE
BFB532EC : B7D17B18
BFB532F0 : 0812C788
BFB532F4 : BFB5429C
BFB532F8 : BFB5431C
BFB532FC : B7D2628C
BFB53300 : B7FA9440
[...]
SOURCE:
EXCEPTION! CODE:0000000B ADDRESS:08050574 WORD:C@
USER DATA: B7D17B18 THREAD ID: B7E54AE0 HANDLER: BFB532D4
[Ошибка сегментирования] Code:1 At:B7E41000
STACK: (269659998) 00000000 0000000B FFFFFFF7 B796280E B7B9641C 004E627E [B7E410
00]
RETURN STACK:
END OF EXCEPTION REPORT

altLinux 4.0

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Пн дек 27, 2010 11:39 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Vikt, какая версия Qt?
Текущая версия работает на Qt 4.7. Если у вас есть на компе gcc, то я могу дать исходники библиотеки fqt. Их надо компилировать с той версией Qt с которой будет потом работать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Вт дек 28, 2010 02:26 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
qt 4.3.3

При запуске пришлось изменить права доступа console.sh console.exe на исполнение.

console.exe надо было из под wine запускать?

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 108 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB