Комментарии 3
строки одним методом конвертируются в *mut c_uchar
И конвертируются неправильно. Учитывая, что длины строковых параметров нигде не передаются, функция почти наверняка ожидает нуль-терминированные строки в качестве строковых параметров, а строки в Rust таковыми не являются.
let mut dbg_data: Vec<c_uchar> = Vec::from([0;300]);
И где гарантия, что 300 байтов хватит для каких бы то ни было целей?
Ещё: почему вы заводите safe_result
только для того, чтобы присвоить в неё значение result
?
И откуда вы вообще взяли эту библиотеку? Поиск в Google по запросу "libPanoMaker" находит только эту статью, а запрос "Xphase Pro PanoMaker" выдаёт какие-то нерелевантные результаты.
а строки в Rust таковыми не являются.
именно поэтому там и передаётся длина вторым параметром.
И конвертируются неправильно. Учитывая, что длины строковых параметров нигде не передаются, функция почти наверняка ожидает нуль-терминированные строки в качестве строковых параметров, а строки в Rust таковыми не являются.
Вы правы, в интернетах пишут, что правильный путь - это использование CString и CStr, которые нуль-терминированы, честно говоря, я теперь удивлен, что у меня все заработало.
И где гарантия, что 300 байтов хватит для каких бы то ни было целей?
Об этом я не упомянул, в документации сказано, что этот параметр должен быть не менее 256 байт.
Ещё: почему вы заводите
safe_result
только для того, чтобы присвоить в неё значениеresult
?
Изначально я это сделал потому, что result хранит значение внутри unsafe блока, а результат растовской функции мне хотелось возвращать из safe блока. Доступа к result снаружи unsafe не будет - другая область видимости. Можно переписать это вот так
let safe_result: i32 = unsafe {
<...>
let result: c_int = ProMakePanoramaBuf( <...> );
<...>
result
};
И откуда вы вообще взяли эту библиотеку? Поиск в Google по запросу "libPanoMaker" находит только эту статью, а запрос "Xphase Pro PanoMaker" выдаёт какие-то нерелевантные результаты.
Ну, я в последнем же абзаце об этом и написал, это очень сложно гуглится, что является лучшей антирекламой этой камеры. А так, вот.
Как с помощью Rust FFI превратить ori-файл в jpeg-панораму