Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
#31: 2008-04-16 22:11:41 ЛС | профиль | цитата
iarspider, значит что-то не обновлено. Тут поможет только прослеживание типа данных целевого языка. Например, посмотреть тут:

#hws
func Result(_data)
trace(expof(res)) // <---- должно выводить 1
if(linked(doOperation))
return(ret_res(res))
else
return(_create(_data))
end
end

убедиться, что тут:

Result=Содержит результат операции после его вычисления методом doOperation|3|0
стоит 0 в конце

пример для тестирования был таков:
code_8857.txt

карма: 27
0
файлы: 1code_8857.txt [597B] [327]
Ответов: 5446
Рейтинг: 323
#32: 2008-04-17 13:20:00 ЛС | профиль | цитата
SVN-лог сообщает, что Math.ini был поправлен в 924 ревизии, а я постил выше результаты теста с 922 ревизией. В 924й ревизии глюка нет.
------------ Дoбавленo:

Dilma, позволь полюбопытствовать: почему у AbstractSlider св-во Orientation сделано 4 типа (List), а не 14 (Enum)?

И ещё вопросик: что обозначает сия конструкция:

#hws
lng.decl_var('res', isdef(ResultType) ? 7 : 1, Default, Extern)
(файл hiMath.hws) ?
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#33: 2008-04-17 15:41:56 ЛС | профиль | цитата
iarspider писал(а):
почему у AbstractSlider св-во Orientation сделано 4 типа (List), а не 14 (Enum)?

потому что в скрипте проверяется только факт изменения данного св-ва, а не фактическое его значение:

#hws
if(isndef(Orientation))
println(ctlr + '->setOrientation(Qt::Horizontal);')
end
при такой записи абсолютно все равно какой тип имеет св-во.

iarspider писал(а):
что обозначает сия конструкция:

lng.decl_var(name, type, default, scope) - расширение объекта lng для объявления переменной целевого языка с именем name и типом type, принимающей значение по умолчанию default и обладающей областью видимости scope(локальная или переменная класса)

#hws
isdef(ResultType) ? 7 : 1
возвращает 7(тип real), если ResultType = Real и 1(тип Integer) в противном случае. Номера типов объявлены в CGTShare.h и имеют имена data_XXX
------------ Дoбавленo:

iarspider, думаю имеет смысл пакет wx поместить так же на svn, но не весь, а только с теми элементами, которые не копируют элементы пакета QT. Для них стоит сделать какой-нибудь copy_from_qt.bat.
карма: 27
0
Ответов: 5446
Рейтинг: 323
#34: 2008-04-17 20:13:09 ЛС | профиль | цитата
Dilma, там только codegen.dpr, иконки да часть ini-файлов общие, а всё остальное отличается. Без изменений вошли:

* DoData
* Hub
* For
* Memory
* Math (? - возможно придётся переделать)
* StrCat

Как я понял, идея помещать только отличающиеся связана с ограничением места под репозиторий? Так там экономия - 4 кб (если не считать иконок)
карма: 1

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#35: 2008-04-18 11:14:07 ЛС | профиль | цитата
Случайно, почти, нашел ресурс в инете посвященный кроссплатформенному программированию:

http://www.crossplatform.ru
------------ Дoбавленo:

Компилировал на Маке пример ..HiAsmElementsqtexampleinternet cpchat.sha - работает.
Но пришлось руками править Makefile. Дело в том что на Маке по-умолчанию в Makefile прописываются QtGui и QtCore, но не QtNetwork.
Как их добавить, кроме как руками, пока не нашел.



------------ Дoбавленo:

Dilma, хочу обратить твоё внимание на прикреплённые файлы этого поста. Среди них есть два файла, которые "убежали" из более раннего моего же поста в этот. Как мне показалось, это произошло после того, что открыл предыдущий пост для копирования из него части текста, а затем стал писать новый пост, но они (файлы) уже были в новом посте.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
файлы: 3picturemacosx.png [7.5KB] [481], chatpc.png [7.8KB] [473], chatmac.png [16.8KB] [478]
Администрация
Ответов: 15295
Рейтинг: 1519
#36: 2008-04-18 12:38:07 ЛС | профиль | цитата
iarspider писал(а):
Как я понял, идея помещать только отличающиеся связана с ограничением места под репозиторий?

отчасти, но не полностью. Многие элементы QT не зависят от используемой библиотеки и являются элементами языка С++ или вовсе языконезависимы. Кроме того они могут так же изменяться или дополняться ввиду чего представляется нецелесообразным плодить несколько копий одинаковых историй для одинаковых элементов. С иконками проблема точно такая же, даже еще более характерна(иконки ведь не привязаны к коду вообще и могут копироваться вообще во все пакеты с SVN), однако с ними такие заморочки врятли оправданы ввиду практически полного отсутвия их правки и как следствие отсутсвие истории.

Nic писал(а):
нашел ресурс в инете посвященный кроссплатформенному программированию

неплохо. Будем оттуда тырить исходники)

Nic писал(а):
Дело в том что на Маке по-умолчанию в Makefile прописываются QtGui и QtCore, но не QtNetwork.

и не только на маке. Эту проблему в пакете решает точка входа в проект(EntryPoint), в коде которой внизу прописаны строки:

#hws
if(isset(_QT_NET_))
println("QT += network")
end
где _QT_NET_ это глобальная переменная, котороя объявляется при первом использование TcpSocket или TcpServer.
QT += network - говорит qmake о том, чтобы тот как раз и добавил QtNetwork к списку линкуемых библиотек.

Если этого не происходит, значит:
- неверно записывается *.pro файл
- qmake не видит *.pro файл или видит его, но не тот
- какие-то еще проблемы с файлом *.pro

Nic писал(а):
которые "убежали" из более раннего моего же поста в этот

это функция форума по переносу файлов между постами. Если было начато редактирование поста с вложениями оно должно быть обязательно завершено.
карма: 27
0
Ответов: 5446
Рейтинг: 323
#37: 2008-04-18 12:51:43 ЛС | профиль | цитата
Dilma, хорошо, как догоню тебя (осталось графика и сеть) - так и Commit сделаю, благо доступ ещё вроде есть
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#38: 2008-04-18 15:17:25 ЛС | профиль | цитата
iarspider, не думаю, что стоит торопиться с грайикой. Сейчас там реализована тестовая надстройка над QGraphicsScene и по сути она не является инструментом для рисования. Скорее это Engene для игр или программ с пользовательскими графическими элементами
карма: 27
0
Ответов: 5446
Рейтинг: 323
#39: 2008-04-18 17:24:42 ЛС | профиль | цитата
Dilma, насчёт графики - ага, я уже посмотрел. "Быстрого" переноса там не получится - нет в wxWidgets прямых аналогов этих классов, хотя написать их не слишком сложная задача (и даже - интересная).
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#40: 2008-04-18 18:15:06 ЛС | профиль | цитата
Для рисования в QT используется класс QPainter - именно на него и следует ориентироваться.
карма: 27
0
Ответов: 5446
Рейтинг: 323
#41: 2008-04-20 13:06:58 ЛС | профиль | цитата
Dilma, помоги разобраться, почему генерируется такой код (пример Browse)?
#cpp
if (dlg2.DoModal() == wxID_OK)
{
op_str2 = dlg2GetPath();
listbox3->Append(_T(""));
}

В QT получается правильно:
#cpp
QString op_str2 = QFileDialog::getExistingDirectory (this, "Select Object", "");
if(!op_str2.isEmpty()) {
listbox3->addItem(op_str2);
}

В прищепке - минимально нужный (для поиска ошибки) набор файлов пакета wxMSW. Иконки, make - из QT; Codegen.dpr - SVN.

------------ Дoбавленo:


Ещё фокус - ошибка CodeGen (доступ по адресу 0).

Добавляем файл includes.hws:
func add_include(f,is_local)
trace ('>>>')
fvar(old)
fvar(incfile)
if (not isset(inclist))
gvar(inclist)
end

trace('>>> is_local')
trace('>>> ' + is_local)

if (is_local == 1)
trace('1')
incfile = '"'
trace('2')
incfile = incfile+f
trace('3')
incfile = incfile+'"'
trace('0')
else
incfile = '<'+f+'>'

trace('>>file')
trace('>>' + f)
trace('>> incfile')
trace('>>' + incfile)

if (pos(incfile,inclist) < 0)
inclist = inclist+incfile
old = block.select(BLK_INC)
trace('>>'+BLK_INC)
println('#include ',incfile)
block.select(old)
end
end

Меняем файл hiEntryPoint следующим образом:
include("wincontrolworks")
include("includes") //+++
func doStart
//... cut ...
println(' ')
add_include("wx/somefile.h", 1) //+++
block.copyhere(BLK_INC)

Получаем креш:
Access violation at address 00FBAA1F in module 'CodeGen.dll'. Read of address 00000000.

в Build log видим следующее:
Build start...
Generated code
>>>
>>> is_local
>>> 1


------------ Дoбавленo:

Для любопытных: код в архиве в прищепке содержт (по крайней мере) 5 ошибок, как в коде скриптов, так и в генерируемом коде. Когда пакет будет готов - он сразу же появится на SVN.
карма: 1

0
файлы: 1wxmsw.rar [14.2KB] [303]
Администрация
Ответов: 15295
Рейтинг: 1519
#42: 2008-04-20 13:09:24 ЛС | профиль | цитата
iarspider, нужно не забывать везде проставлять типы данных у переменных целевого языка. В последней редакции codegen все не поддерживаемые типы приводит к пустым данным, чтобы при неверном соединение точек не выскакивало ошибок компиляции.
В данном случае надо у точки onBrowse задать строковый тип данных

onBrowse=Событие происходит всякий раз после выбора каталога и возвращает его имя в поток|2|2

так же можно сделать эффективнее вот этот кусок:

#hws
switch (Type)
case 'OK': //wxOK
wxType = 'wxOK'
case 'YesNo': //wxYesNo
wxType = 'wxYES_NO'
case 'OK_Cancel': //wxOK
wxType = 'wxOK | wxCANCEL'
case 'YesNo_Cancel':
wxType = 'wxYES_NO | wxCANCEL'
end
переписав так:

#hws
fvar(tp)
tp = 'wxOK' & 'wxYES_NO' & 'wxOK | wxCANCEL' & 'wxYES_NO | wxCANCEL'
wxType = tp[Type]
св-во Type должно при этом иметь тип 4, а не 14
------------ Дoбавленo:

iarspider писал(а):
Ещё фокус - ошибка CodeGen (доступ по адресу 0).

сразу могу сказать, что не хватает закрывающего end


#hws
else
incfile = '<'+f+'>'
end
карма: 27
0
Ответов: 5446
Рейтинг: 323
#43: 2008-04-20 13:29:04 ЛС | профиль | цитата
По Browse и Message - спасибо, поправил.

По includes - не помогло, вылетает точно так же
------------ Дoбавленo:

Поэкспериментировал ещё немного. Если убрать if..else..end, то вылета нет.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#44: 2008-04-20 20:26:39 ЛС | профиль | цитата
ошибка была из-за

#hws
if (is_local == 1)
оператор == не поддерживался. Добавил его поддержку в FTCG. Вообще все это описано тут Логические операторы
так же поддерживаются +=, -=, *=, /=, &=, &&= поэтому вот такое:

#hws
incfile = incfile+'
можно упрощать до такого:

#hws
incfile += '

карма: 27
0
Главный модератор
Ответов: 2999
Рейтинг: 396
#45: 2008-04-20 21:31:32 ЛС | профиль | цитата
Dilma писал(а):
Если этого не происходит, значит:


Просто не переносил на Мак pro-файл. Переопределил g++ компилятором по-умолчанию.
Теперь достаточно двух команд для компиляции под MacOSX: "qmake" и "make".
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)