Здравствуйте, гость ( Вход | Регистрация )

> Lua number -> pointer cast
Cockney
сообщение 5.11.2019, 13:16
Сообщение #1


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22547
Пользователь №: 16.156



Вопрос знатокам.

Есть ffi.cdef

Код

    struct image_descriptor {
           unsigned char* address;
           int width;
           int height;
           int length;
    };


далее

Код
local a,w,h,l = getimage()

local img_descr = ffi.cast("struct image_descriptor*")
img_descr.address = a


Получаем ошибку. Собственно, на сколько я понял, в документации написано : только number -> number, pointer -> pointer, иные варианты не допустимы.

Как выкручиваться ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
DarkMaster
сообщение 14.11.2019, 17:51
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.742
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29656
Пользователь №: 11.279



Цитата
Именно 1?

Шифт. -1 естественно. У меня студии под рукой нет. Мне прям интересно даст ли присвоить именно на стадии компиляции -1 указателю.
Цитата
А вот и нет. Сама система типов не даст без явных кастов пропихнуть -1 как адрес. Получишь минимум ворнинг. А вот в int, который уже в моей длл будет выглядеть как поинтер - пожалуйста.

Вот есть как раз подозрение, что это как максимум. Не уверн в том, что будет ошибка компиляции и совсем не уверен будет ли хоть какая-то разница в бинарнике.
Цитата
К слову, для ясности, int, unsigned int - фундаментальные типы, т.е. априори они не одно и тоже.

Я с Сями хоть и на вы, но не настолько же) Уж как в памяти это выглядит я себе представляю и там разница в одном бите который определяет знак либо значение разряда в зависимости от типа.
Я не говорю, что это одно и то же, я говорю о том, что, как я помню указатель является int'ом, а не uint'ом, т.к. ограничение по диапазону значений соответсвует int, так же учитывая скорость обработки знаковых и беззнаковых типов намекает на то, что делать указатель беззнаковым типом к большой потере производительности. Это одна из причин, почему я очень сильно сомневаюсь в получении эксепшена в откомпиленной программе и ворнинг компилятора скорее все, что мы получим (речь естественно о присвоении, а не про обращение по адресу).

Цитата
К слову, для ясности, int, unsigned int - фундаментальные типы, т.е. априори они не одно и тоже.

Так же речь была именно про одинаковые в памяти вещи. Самый поверхностный вариант ты уже привел - byte. Можно еще открыть winapi и посмотреть какая там радость наворочена. Достаточно вспомнить отсылку сообщений когда отсылаются два параметра по два байта. Беззановые. Думаешь unsigned word там будет?) И так со всем.

Сообщение отредактировал DarkMaster - 14.11.2019, 17:43


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения



Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 9.7.2025, 20:05
Designed by Nickostyle