SilentPrayerCG
MulAddS2X проверю в первую очередь.
Mikle
что-то я не вдуплю
в твоем примере, убираю весь код, оставляю только
Dim Grp As Graphics Dim hDC As HandleRef Private Sub Form1_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated Grp = Me.CreateGraphics hDC = New HandleRef(Grp, Grp.GetHdc) End Sub
как только пытаюсь объявить спрайт (без ошибки), и отчистить его, на очистке вываливается с кодом -1073740791 (0xc0000409).
Но, в моем проекте, созданном с нуля, куда я скопировал библиотеку и классы, очистка и рисование спрайта на форму работает.
ps
movebyte в чистом проекте тоже оверфлоу выдает
pps
загрузил 1001 спрайт в лист, ничего не вылетело, ехе заняло ~4470 мегабайт
повыводил в таймере, рандомный спрайт из списка на форму - все хорошо, отображается
Заменил в проекте процедуру Render:
Private Sub Render() SprBack.MulAddS2X(SprCol, 0, 0, ARGB(128, 255, 128, 128), ARGB(128, 255, 128, 128)) SprBack.PaintToDevice(hDC) End Sub
Нормально работает, не вылетает.
SilentPrayerCG
> загрузил 1001 спрайт в лист, ничего не вылетело, ехе заняло ~4470 мегабайт
> повыводил в таймере, рандомный спрайт из списка на форму - все хорошо,
> отображается
Это хорошо, главная цель достигнута.
SilentPrayerCG
> пытаюсь объявить спрайт (без ошибки), и отчистить его
А создать после объявления? Типа:
SprTemp = New Sprite(256, 256)
Mikle
если за основу твой проект примера использовать, то не важно как я объявляю спрайт
объявляется он без ошибки, а вот как только пытаюсь почистить выдаёт тот код
вот сейчас попробовал, и опять тот код
1 раз кстати проскочило Access violation, а потом опять вернулось к безымянному коду (я пытался нагуглить что-то ничего не выдаёт дельного)
в чистом же проекте, я могу создать спрайт сделать clear нужным цветом, и потом нарисовать его. нет ошибок
хм..
сейчас попробовал, заменил рендер на строку из сообщения - работает
выключил таймер, добавил кнопку
добавил событие
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim s As New Sprite(256, 256)
s.ClearBuffer(ARGB(255, 123, 23, 45))
s.PaintToDevice(hDC)
End Sub
итог при нажатии -
The program '[32948] DPBM.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'.
Может у меня студия троит? Вообще сколько я пользовался ей, хоть и не много, вроде все было нормально, но с каких-то старых пор она стоит у меня preview
Я сейчас посмотрел, комьюнити 2019 вроде уже есть стабильная, поставлю её. Может реально это студия шалит просто.
Нифига не дало, тоже самое 1 в 1.
В dpbm проекте, выполнение прерывается (только теперь я не вижу окна с логом где пишется код ошибки. может спрятан где-то)
в созданом с нуля проекте, вылазят ошибки переполнения
к примеру в случае с mul в строчке
Dp = Dp + DataPTR(meLeft, meTop)
я так понял на DataPTR ругается, все остальное тут по нулям.
upd
попробовал пошаговый трейс в dpbm проекте, в строчках по созданию спрайта и очистке
сдохло вот тут
Public Sub ClearBuffer(ByVal c As Integer) If meRight <= meLeft Then Exit Sub If meBottom <= meTop Then Exit Sub SClearC(cBuf(meLeft + meTop * meWidth), meRight - meLeft, meBottom - meTop, meWidth, c) End Sub
на последней строчке
что-бы это не значило
upd2
хм...
В общем ясно. Я пока с таким не сталкивался, в том числе с х32 битным sr2d
короче новый проект по дефолту создается сразу под последний фреймворк - 4.8, и вот под ним ничего не падает - но оверфлоу
а пример он под дремучий 2.0 сделан, вот почему он у меня просто прерывает выполнение (и куда пропало то окно с логом), я не знаю...
Вечером дома посмотрю.
maxvalue у int64 вроде одинаковое, что в 2ом фреймворке что в 4.8ом.
не пойму куда-то делось то окно где вылазила ошибка)
вроде-бы output но что-то не вылазит ничего, причем в превью я специально никаких окон не открывал, кроме списка ошибок...
ну ладно, буду ждать твоих сообщений
ps
а все.. нашел, это окошко output и в опциях нужно в debugging->output window включить флаг process exit message, тогда будет ясно почему процесс подох
правда не ясно, что это ошибка значит, но похоже, судя по тому что я нагуглил, она связана с миграцией с студии на студию, хотя я копировал код в чистый проект.. ерунда какая-то
а ну да, я копировал код из проекта который уже мигрировал...
SilentPrayerCG
А было такое, чтобы EXE, который я скомпилировал (лежит в архиве с примером), выдавал ошибку?
А то у меня всё работает, проверяю в двух студиях - 2008 и 2017.
SilentPrayerCG
Кое-что исправил, перезалил по той же ссылке: https://yadi.sk/d/ejnc7Q-iPJyYkA
Mikle
уже готовый ехе не проверял, но пример у меня и так работает, он собирается и работает
не проверял правда на 4.8 фреймворке
но как только я начинаю что-то проверять, он падает, и под что-то я имею ввиду хотя-бы отчистить созданный спрайт
проверил новый пример. на 2ом фреймворке так и прерывается выполнение (не то что-бы он нужен мне прям, этот 2ой фреймворк)
на 4.72 / 4.8 зато перестал оверфлоу выдавать (по крайней мере при мул)
видимо со вторым фреймворком это какая-то проблема миграции, или типа того
завтра еще погоняю
У меня тоже ClearBuffer дал ошибку. Буду искать.
Нашёл в чём дело. Там ещё несколько таких же мест, к вечеру постараюсь исправить.
Исправил, перезалил по той же ссылке: https://yadi.sk/d/ejnc7Q-iPJyYkA
Поменял имя dll на SR2D64.dll, чтобы не путаться в версиях.
Проверил всё, кроме некоторых операций с маской, ошибок не было.
Перенёс обсуждение x64 в соседнюю тему: https://gamedev.ru/community/bycircle/forum/?id=246671
Тема в архиве.