OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 15:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 29 Май, 2014 12:27 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Интересует описание как в приложении к репорту Oberon 2.
Такое ощущение, что видел, но не помню где.

В частности на данный момент интересуют указатели на массивы.
Не могу понять почему не удается напрямую сконвертить POINTER TO ARRAY OF SHORTCHAR в сишный безтеговый char*.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 29 Май, 2014 14:13 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
На всякий случай, я это уже победил с помощью конвертации адреса, взятого от разыменованного поинтера.
SYSTEM.VAL(C.PtrChar, SYSTEM.ADR(ptr^))

Меня интересует почему не работает так:
SYSTEM.VAL(C.PtrChar, ptr)

Т.е., грубо говоря, почему SYSTEM.ADR(ptr^) # ptr ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 29 Май, 2014 16:02 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Надо так вроде SYSTEM.ADR(ptr[0])

На сколько я помню, это связано с тем, что есть какая-то служебная информация еще о массиве по адресу указателя, а сам массив немного позже в куче лежит.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 29 Май, 2014 16:35 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Точно. Спасибо.

А по поводу служебной информации... ну я так и понял. Вот и хотелось бы знать как оно устроено, чтоб не гулять по граблям.

Да и вообще надо бы документик написать о всех этих особенностях, чтобы было подспорье в биндинге.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 30 Май, 2014 09:40 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Оберонкор-Вики-Дополнительная документация.

http://oberoncore.ru/library/ermakov_vn ... ejs_kernel

Там раздел "Диспетчер памяти", как раз и про дин. массивы, их заголовки описано.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 30 Май, 2014 10:59 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Спасибо. Вот я слепой. :|
Смотрел же там, но не обратил внимание на:
Цитата:
Для массивов вводятся следующие поля:

Или, возможно, просто не уловил связь с:
Цитата:
начиная со смещения 0


Значит адрес массива = SYSTEM.ADR(ptr) + 3*4
Теперь все прояснилось :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB