3
녹에서 F30 함수가 필요하고 고정 된 크기의 배열을 허용하려고합니다. C 코드는 다음과 같이 전달됩니다.C에 대한 녹의 배열 포인터를 나타내는 방법
// C code
extern int(*)[4] call_rust_funct(unsigned char (*)[3]);
....
unsigned char a[] = { 11, 255, 212 };
int(*p)[4] = call_rust_funct(&a);
내 녹 기능은 어떻게 작성합니까?
// Pseudo code - DOESN'T COMPILE
pub unsafe extern "C" fn call_rust_funct(_p: *mut u8[3]) -> *mut i32[4] {
Box::into_raw(Box::new([99i32; 4]))
}
포인터이기 때문에 extern 함수 시그니처에'* mut std :: os :: raw :: c_void'를 사용하여 올바른 유형으로 변환 할 수 있습니다. –
@PavelStrakhov : 답변 : –
@PavelStrakhov 올바른 유형을 사용하면'void *'를 사용하는 것보다 몇 가지 유형 안전성이 있으므로 최후의 수단으로 만 사용합니다. 이것을 녹이기위한 해결책이 없다는 뜻입니까? – ustulation