OberonCore
https://forum.oberoncore.ru/

SDL (Simple DirectMedia Layer)
https://forum.oberoncore.ru/viewtopic.php?f=47&t=2019
Страница 3 из 3

Автор:  Пётр Кушнир [ Суббота, 01 Март, 2014 10:38 ]
Заголовок сообщения:  Re: SDL (Simple DirectMedia Layer)

Код:
VAR pointer: PPoint;
BEGIN
pointer:=SYSTEM.VAL(PPoint, SYSTEM.ADR(points^));

Автор:  Иван Кузьмицкий [ Суббота, 01 Март, 2014 12:11 ]
Заголовок сообщения:  Re: SDL (Simple DirectMedia Layer)

Спасибо, заработало!

Автор:  Илья Ермаков [ Суббота, 01 Март, 2014 14:23 ]
Заголовок сообщения:  Re: SDL (Simple DirectMedia Layer)

Попробуйте так:

Sdl2Win.RenderDrawLines(renderer(Renderer).r, SYSTEM.VAL(Sdl2Win.PPoint, S.ADR(points[0])), count)

Автор:  Илья Ермаков [ Суббота, 01 Март, 2014 14:28 ]
Заголовок сообщения:  Re: SDL (Simple DirectMedia Layer)

Оп, не заметил, что Пётр уже ответил ))
Но я обычно беру в таких случаях адрес от нулевого элемента... Как-то надёжнее )))

Насчёт варианта Петра:
- тут интересный языковый вопрос. POINTER TO ARRAY OF CHAR - это динамический массив неизвестного размера.
Какой тип является результатом ^ для указателя на динамический массив? Открытый массив?

Технически же - у дин. массива в начале лежит заголовок с размерами по всем измерениям.
Т.е. S.VAL(untagged_p_array, pArray) - даст указатель отнюдь не на данные...

А S.VAL(utagged_p_array, S.ADR(pArray^)), значит, т.к. Вы опробовали, даёт эффект, эквивалентный S.VAL(utagged_p_array, S.ADR(pArray[0]))

Автор:  Пётр Кушнир [ Суббота, 01 Март, 2014 14:54 ]
Заголовок сообщения:  Re: SDL (Simple DirectMedia Layer)

Я тут недавно ковырял, вроде, по косвенным данным стало понятно, что разыменованый указатель дает массив анонимного типа (ARRAY 41 OF CHAR например), то есть фактический массив получается статическим и вполне определенной длины.
Затем я сравнил размер типов, через SIZE: ARRAY 41 OF RECORD END и ARRAY 41 OF RECORD [untagged] END - размеры совпали.
Размер untagged и обычного рекорда совпал. Ну я и подумал, что надо просто создать указатель на этот разыменованный массив. А указатель уже известно как создать - записать в указательный тип адрес рекорда.

Автор:  Илья Ермаков [ Суббота, 01 Март, 2014 16:55 ]
Заголовок сообщения:  Re: SDL (Simple DirectMedia Layer)

Я имею в виду статическую типизацию, с точки зрения компилятора!
Т.е., если разыменовываете POINTER TO ARRAY OF CHAR, то получиться тип ARRAY 41 OF CHAR никак не может!
Может получиться тип ARRAY OF CHAR - открытый массив...
И SIZE, по идее, не должен быть применим.

Вот если POINTER TO ARRAY 41 OF CHAR, то да, тогда будет анонимный тип массив фиксированного размера.

Страница 3 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/