Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Надо разбираться в классах QWebKit. Я пока еще не копал глубоко. Это просто эксперимент, на время. Хотел понять сколько надо времени на добавление новой функциональности в QtE. Вот на это (см выше) у меня ушло часа 2 где то. Основное время на то, что бы понять что с чем стыкуется в Qt.
Надо разбираться в классах QWebKit. Я пока еще не копал глубоко. Это просто эксперимент, на время. Хотел понять сколько надо времени на добавление новой функциональности в QtE. Вот на это (см выше) у меня ушло часа 2 где то. Основное время на то, что бы понять что с чем стыкуется в Qt.
|
|
|
|
Добавлено: Чт окт 17, 2013 22:50 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
О, прикольно. А как получить и обработать результат загрузки? И можно ли, например, повесить свой обработчик на какие-то события на странице?
О, прикольно. А как получить и обработать результат загрузки? И можно ли, например, повесить свой обработчик на какие-то события на странице?
|
|
|
|
Добавлено: Чт окт 17, 2013 22:41 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Из SPF в Internet. Добавил в QtE.f пару новых классов из QWebKit. Код: // QWebView pFunQt[88] = GetPrAddres(bQtE, hQtE, "QT_QWebView"); if (!pFunQt[88]) MessageErrorLoad(showError, "QT_QWebView"w, 2); pFunQt[91] = GetPrAddres(bQtE, hQtE, "QT_QWebView_load"); if (!pFunQt[91]) MessageErrorLoad(showError, "QT_QWebView_load"w, 2); // QUrl pFunQt[89] = GetPrAddres(bQtE, hQtE, "QT_QUrl"); if (!pFunQt[89]) MessageErrorLoad(showError, "QT_QUrl"w, 2); pFunQt[90] = GetPrAddres(bCore, hQtCore, "_ZN4QUrl6setUrlERK7QString"); if (!pFunQt[90]) MessageErrorLoad(showError, "QUrl::setUrl(QString)"w, 2);
// =============== QWebView ======================== fQWidget SUBCLASS fQWebView : create // Инициализация класса 0 {{ QtE pFunQt_88 }} SUPER p_QObject ! ; : load // ( Astr -- ) Вернуть значение SUPER p_QObject @ {{ QtE pFunQt_91 }} DROP ; ;CLASS // =============== QUrl ======================== fQObject SUBCLASS fQUrl : create // ( Aobj -- ) Инициализация класса {{ QtE pFunQt_89 }} SUPER p_QObject ! ; : setUrl // ( Astr -- ) Установить URL из QString SUPER p_QObject @ {{ QtE pFunQt_90 }} DROP ; ;CLASS
Вот такой кусок кода обеспечивает открытие окна и отображение в нем http://www.yandex.ru Код: fQString NEW qsTmp2 qsTmp2.create \ Создали QString Z" http://www.yandex.ru" SrcCodec.QtObj SWAP qsTmp2.toUnicode \ и записали в неё адрес сайта fQUrl NEW url url.create qsTmp2.QtObj url.setUrl \ подготовили URL для WebKit fQWebView NEW wv wv.create wv.show \ отобразили окно браузера на экране url.QtObj wv.load \ загрузили в него yandex
Из SPF в Internet.
Добавил в QtE.f пару новых классов из QWebKit. [code] // QWebView pFunQt[88] = GetPrAddres(bQtE, hQtE, "QT_QWebView"); if (!pFunQt[88]) MessageErrorLoad(showError, "QT_QWebView"w, 2); pFunQt[91] = GetPrAddres(bQtE, hQtE, "QT_QWebView_load"); if (!pFunQt[91]) MessageErrorLoad(showError, "QT_QWebView_load"w, 2); // QUrl pFunQt[89] = GetPrAddres(bQtE, hQtE, "QT_QUrl"); if (!pFunQt[89]) MessageErrorLoad(showError, "QT_QUrl"w, 2); pFunQt[90] = GetPrAddres(bCore, hQtCore, "_ZN4QUrl6setUrlERK7QString"); if (!pFunQt[90]) MessageErrorLoad(showError, "QUrl::setUrl(QString)"w, 2);
// =============== QWebView ======================== fQWidget SUBCLASS fQWebView : create // Инициализация класса 0 {{ QtE pFunQt_88 }} SUPER p_QObject ! ; : load // ( Astr -- ) Вернуть значение SUPER p_QObject @ {{ QtE pFunQt_91 }} DROP ; ;CLASS // =============== QUrl ======================== fQObject SUBCLASS fQUrl : create // ( Aobj -- ) Инициализация класса {{ QtE pFunQt_89 }} SUPER p_QObject ! ; : setUrl // ( Astr -- ) Установить URL из QString SUPER p_QObject @ {{ QtE pFunQt_90 }} DROP ; ;CLASS [/code]
Вот такой кусок кода обеспечивает открытие окна и отображение в нем http://www.yandex.ru [code] fQString NEW qsTmp2 qsTmp2.create \ Создали QString Z" http://www.yandex.ru" SrcCodec.QtObj SWAP qsTmp2.toUnicode \ и записали в неё адрес сайта fQUrl NEW url url.create qsTmp2.QtObj url.setUrl \ подготовили URL для WebKit fQWebView NEW wv wv.create wv.show \ отобразили окно браузера на экране url.QtObj wv.load \ загрузили в него yandex [/code]
|
|
|
|
Добавлено: Чт окт 17, 2013 22:34 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
mgw писал(а): Нашел как загрузить SO и она грузится, нашел поиск и загрузку функции - работает, а вот как вызвать функцию, так и не нашел. Пример есть в unix\socket.fs. Там прямо в исходнике *.fs на си пишется код, сопоставляются сишные функции и форт-слова, затем при компиляции исходника к си коду дописываются нужные инклюды и он автоматически компилируется в so. Соответственно скомпилированные либы сохраняются в домашнем каталоге пользователя в каталоге ~/.gforth/libcc-named. При этом gForth почему-то не отслеживает изменения в си коде в форт-исходнике и при изменении си кода необходимо удалить исходники и so-файлы, чтобы gForth их перекомпилировал. Я просто не стал разбираться, как указать gForth перекомпилировать so и просто сделал скриптик: Код: #!/bin/sh rm -f -r ~/.gforth/libcc-named/*.c rm -f -r ~/.gforth/libcc-named/*.o rm -f -r ~/.gforth/libcc-named/*.lo rm -f -r ~/.gforth/libcc-named/*.la И запускаю его автоматом при запуске gForth-а - все равно оно компилируется достаточно быстро. Вот тут на гитхабе лежит текущая версия gForth-а, уже с поддержкой многопоточности через ptheards.c.
[quote="mgw"]Нашел как загрузить SO и она грузится, нашел поиск и загрузку функции - работает, а вот как вызвать функцию, так и не нашел. [/quote] Пример есть в [i]unix\socket.fs[/i]. Там прямо в исходнике *.fs на си пишется код, сопоставляются сишные функции и форт-слова, затем при компиляции исходника к си коду дописываются нужные инклюды и он автоматически компилируется в so. Соответственно скомпилированные либы сохраняются в домашнем каталоге пользователя в каталоге [i]~/.gforth/libcc-named[/i]. При этом gForth почему-то не отслеживает изменения в си коде в форт-исходнике и при изменении си кода необходимо удалить исходники и so-файлы, чтобы gForth их перекомпилировал. Я просто не стал разбираться, как указать gForth перекомпилировать so и просто сделал скриптик: [code]#!/bin/sh rm -f -r ~/.gforth/libcc-named/*.c rm -f -r ~/.gforth/libcc-named/*.o rm -f -r ~/.gforth/libcc-named/*.lo rm -f -r ~/.gforth/libcc-named/*.la[/code] И запускаю его автоматом при запуске gForth-а - все равно оно компилируется достаточно быстро. [url=https://github.com/forthy42/gforth][u]Вот тут на гитхабе[/u][/url] лежит текущая версия gForth-а, уже с поддержкой многопоточности через ptheards.c.
|
|
|
|
Добавлено: Вс окт 06, 2013 22:45 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Изготовил QtE - 64. Проверил на D в 64 разрядном режиме (Fedora 19 - 64). Всё работает. Покрутил gForth ... сильно запутанно. Нашел как загрузить SO и она грузится, нашел поиск и загрузку функции - работает, а вот как вызвать функцию, так и не нашел. То, что они рекомендуют не работает. Субъективно конечно, но 32 разрядная система работает заметно быстрее 64 разрядной. (amd Athlon 64 X2, 3gb памяти). QtE for Dlang 64 http://files.mail.ru/D03386CA294542298B2EDF297B4FF313
Изготовил QtE - 64. Проверил на D в 64 разрядном режиме (Fedora 19 - 64). Всё работает. Покрутил gForth ... сильно запутанно. Нашел как загрузить SO и она грузится, нашел поиск и загрузку функции - работает, а вот как вызвать функцию, так и не нашел. То, что они рекомендуют не работает. Субъективно конечно, но 32 разрядная система работает заметно быстрее 64 разрядной. (amd Athlon 64 X2, 3gb памяти).
QtE for Dlang 64 http://files.mail.ru/D03386CA294542298B2EDF297B4FF313
|
|
|
|
Добавлено: Вс окт 06, 2013 22:15 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Решил попробовать QtE в 64 разрядах. Поставил 64 разрядную Fedora 19. Пока борюсь с ошибками, но что радует - уже отображается окошко (QWidget) и правильно работают события. Пока работаю на D, но планирую испытать и под фортом. Скорее всего под gForth 64
Решил попробовать QtE в 64 разрядах. Поставил 64 разрядную Fedora 19. Пока борюсь с ошибками, но что радует - уже отображается окошко (QWidget) и правильно работают события. Пока работаю на D, но планирую испытать и под фортом. Скорее всего под gForth 64
|
|
|
|
Добавлено: Чт окт 03, 2013 21:12 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Ясно, спасибо! Как будет время - закопаюсь.
Ясно, спасибо! Как будет время - закопаюсь.
|
|
|
|
Добавлено: Вт сен 17, 2013 21:59 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Кавычки - мне так удобнее визуально видеть где имя функции, а где полученное слово. И современные редакторы подсвечивают строку.
Определить что? Если тип вызова, то читай док по конкретной so. Как ее запрограммировали так и надо вызывать. В linux системные библитеки в cdecl
Кавычки - мне так удобнее визуально видеть где имя функции, а где полученное слово. И современные редакторы подсвечивают строку.
Определить что? Если тип вызова, то читай док по конкретной so. Как ее запрограммировали так и надо вызывать. В linux системные библитеки в cdecl
|
|
|
|
Добавлено: Вт сен 17, 2013 20:54 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Для кода есть bb-тег CODE. mgw писал(а): if=L Library@ libc6 1 CDECL-Call" malloc" malloc А зачем кавычки? Все равно в функциях пробелов не бывает - можно же сразу слово забирать из входного потока. mgw писал(а): Типы вызовов могут быть разные: CDECL-Call CDECL-Call-N STDCALL-Call STDCALL-Call-N WINAPI-Call WINAPI-Call-N Extern THIS-CDECL-Linux-gcc-Call THIS-CDECL-Win-MinGW-Call А как определить?
Для кода есть bb-тег CODE. [quote="mgw"]if=L Library@ libc6 1 CDECL-Call" malloc" malloc[/quote] А зачем кавычки? Все равно в функциях пробелов не бывает - можно же сразу слово забирать из входного потока. [quote="mgw"]Типы вызовов могут быть разные: CDECL-Call CDECL-Call-N STDCALL-Call STDCALL-Call-N WINAPI-Call WINAPI-Call-N Extern THIS-CDECL-Linux-gcc-Call THIS-CDECL-Win-MinGW-Call[/quote] А как определить?
|
|
|
|
Добавлено: Вт сен 17, 2013 20:31 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Скачиваешь архив http://qte.ucoz.ru/load от 08.09.13 (самый свежий). В нем есть каталог spf. В этом каталоге есть папка ~mgw - копируешь её в каталог devel в spf. В этой папке mgw_dll.f В своём файле пишешь: REQUIRE CDECL-CALL ~mgw/mgw_dll.f \ Подготовка к загрузке, реальной загрузки библиотеки нет if=L Library" libc.so.6" libc6 \ сработает в Linux if=W Library" libc.dll" libc6 \ сработает в Windows. Имя DLL не помню, пишу для примера \ Формируем список с описанием вызова. \ Перед типом вызова количество аргументов для функции if=L Library@ libc6 1 CDECL-Call" malloc" malloc if=L Library@ libc6 2 CDECL-Call" calloc" calloc if=L Library@ libc6 1 CDECL-Call" free" free : malloc0 1 calloc ; // Выделить память и обнулить её \ Загрузим и активизируем библиотеку. В этот момент список функций заполняется \ реальными адресами LibraryLoad libc6 : ВыделитьВхипеИзанулить ( Nбайт -- A ) \ Выделяет и зануляет в хипе N байт malloc0 ; Типы вызовов могут быть разные: CDECL-Call CDECL-Call-N STDCALL-Call STDCALL-Call-N WINAPI-Call WINAPI-Call-N Extern THIS-CDECL-Linux-gcc-Call THIS-CDECL-Win-MinGW-Call
Скачиваешь архив [url]http://qte.ucoz.ru/load[/url] от 08.09.13 (самый свежий). В нем есть каталог spf. В этом каталоге есть папка ~mgw - копируешь её в каталог devel в spf. В этой папке mgw_dll.f
В своём файле пишешь: REQUIRE CDECL-CALL ~mgw/mgw_dll.f
\ Подготовка к загрузке, реальной загрузки библиотеки нет if=L Library" libc.so.6" libc6 \ сработает в Linux if=W Library" libc.dll" libc6 \ сработает в Windows. Имя DLL не помню, пишу для примера
\ Формируем список с описанием вызова. \ Перед типом вызова количество аргументов для функции if=L Library@ libc6 1 CDECL-Call" malloc" malloc if=L Library@ libc6 2 CDECL-Call" calloc" calloc if=L Library@ libc6 1 CDECL-Call" free" free
: malloc0 1 calloc ; // Выделить память и обнулить её
\ Загрузим и активизируем библиотеку. В этот момент список функций заполняется \ реальными адресами LibraryLoad libc6
: ВыделитьВхипеИзанулить ( Nбайт -- A ) \ Выделяет и зануляет в хипе N байт malloc0 ;
Типы вызовов могут быть разные: CDECL-Call CDECL-Call-N STDCALL-Call STDCALL-Call-N WINAPI-Call WINAPI-Call-N Extern THIS-CDECL-Linux-gcc-Call THIS-CDECL-Win-MinGW-Call
|
|
|
|
Добавлено: Вт сен 17, 2013 18:15 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
mgw писал(а): В тех библиотеках, что я видел в SPF-4.20 подключение в Windows и Linux различаются синтаксисом, что мне не удобно. Я написал свою библиотеку. Она универсальна и работает одинаково в обоих операционках. Если есть необходимость, могу выложить и рассказать как работает. Да, интересно.
[quote="mgw"]В тех библиотеках, что я видел в SPF-4.20 подключение в Windows и Linux различаются синтаксисом, что мне не удобно. Я написал свою библиотеку. Она универсальна и работает одинаково в обоих операционках. Если есть необходимость, могу выложить и рассказать как работает.[/quote] Да, интересно.
|
|
|
|
Добавлено: Вт сен 17, 2013 16:57 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
1 - задать каталог поиска. Обычно в переменной LD_LIBRARY_PATH Для установки текущего каталога: LD_LIBRARY_PATH=`pwd`; export LD_LIBRARY_PATH
2 - Загрузить библиотеку и дальше как обычно, поиск функции и т.д.
В тех библиотеках, что я видел в SPF-4.20 подключение в Windows и Linux различаются синтаксисом, что мне не удобно. Я написал свою библиотеку. Она универсальна и работает одинаково в обоих операционках. Если есть необходимость, могу выложить и рассказать как работает.
1 - задать каталог поиска. Обычно в переменной LD_LIBRARY_PATH Для установки текущего каталога: LD_LIBRARY_PATH=`pwd`; export LD_LIBRARY_PATH
2 - Загрузить библиотеку и дальше как обычно, поиск функции и т.д.
В тех библиотеках, что я видел в SPF-4.20 подключение в Windows и Linux различаются синтаксисом, что мне не удобно. Я написал свою библиотеку. Она универсальна и работает одинаково в обоих операционках. Если есть необходимость, могу выложить и рассказать как работает.
|
|
|
|
Добавлено: Вт сен 17, 2013 16:09 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Как подключать внешние so-библиотеки в LinuxSPF_x86?
Как подключать внешние so-библиотеки в LinuxSPF_x86?
|
|
|
|
Добавлено: Вт сен 17, 2013 08:21 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
SP-Forth x64 на гитхабе: https://github.com/VoidVolker/spf64Собственно, предлагаю перенести обсуждение спф-64 в отдельную тему.
SP-Forth x64 на гитхабе: https://github.com/VoidVolker/spf64 Собственно, предлагаю перенести обсуждение спф-64 в отдельную [url=http://fforum.winglion.ru/viewtopic.php?f=18&t=2961&p=38413#p38413]тему[/url].
|
|
|
|
Добавлено: Чт авг 22, 2013 15:21 |
|
|
|
|
|
Заголовок сообщения: |
Re: SPF/Linux |
|
|
Очередная версия [url]http://fpauk.narod.ru/LinuxSPF64.3.tar.bz2[/url]
|
|
|
|
Добавлено: Ср авг 21, 2013 23:57 |
|
|
|
|