Size: a a a

Rust — русскоговорящее сообществo

2020 September 24

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Эрик
А procaddr ты где присваиваешь?
источник

Э

Эрик in Rust — русскоговорящее сообществo
А почему ты procaddr вместо LPTHREAD_START_ROUTINE суёшь?
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Эрик
А почему ты procaddr вместо LPTHREAD_START_ROUTINE суёшь?
Так и должно быть, но нужна конвертация типа или что-то подобное
источник

Э

Эрик in Rust — русскоговорящее сообществo
Указатели на функции только трансмутить.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Эрик
Указатели на функции только трансмутить.
?
источник

Э

Эрик in Rust — русскоговорящее сообществo
let procaddr: LPTHREAD_START_ROUTINE = if procaddr.is_null() { None } else { Some(transmute(procaddr) };
источник

Э

Эрик in Rust — русскоговорящее сообществo
Но не факт, что это сейфово.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Там надо очень аккуратно быть.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Эрик
let procaddr: LPTHREAD_START_ROUTINE = if procaddr.is_null() { None } else { Some(transmute(procaddr) };
Спасибо за пример! Работает.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Изначально, я увидел такой пример в рабочем образце и захотелось разобраться нормально.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Посмотрю ещё, что с этим можно сделать.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Эрик
let procaddr: LPTHREAD_START_ROUTINE = if procaddr.is_null() { None } else { Some(transmute(procaddr) };
Вот рабочий способ от разработчика крейта winapi:
Some(*(&procaddr as *const _ as *const extern "system" fn(LPVOID) -> u32))
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
источник

Э

Эрик in Rust — русскоговорящее сообществo
Тот же самый трансмут, только ещё ансейфовее чем мой.
источник

Э

Эрик in Rust — русскоговорящее сообществo
*(&x as *const _ as *const U) — это аналог transmute_copy, который даже совпадения размеров не проверяет.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Я бы на твоём месте issue ему туда в репу запихал бы, чтобы этот transmute_copy в шляпе заменить на transmute.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А, стоп, это же коммент, а не код.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ладно, можно без issue.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Эрик
*(&x as *const _ as *const U) — это аналог transmute_copy, который даже совпадения размеров не проверяет.
Размеров указателей?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Zymlex (Юрий)
Размеров указателей?
Того, на что указывает.
источник