Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何取消对C/C+的引用+;void*到struct还是在Rust中回调?_C++_Rust_Ffi - Fatal编程技术网

C++ 如何取消对C/C+的引用+;void*到struct还是在Rust中回调?

C++ 如何取消对C/C+的引用+;void*到struct还是在Rust中回调?,c++,rust,ffi,C++,Rust,Ffi,我想为一个旧游戏写一个AI,在Rust中。此游戏的AI是库,在其Linux端口中它只是一个。因此文件导出: extern“C”void客户端(int命令、int播放器、void*数据); void*数据可以是struct(取决于命令),也可以是此函数: typedef int-TServerCall(int命令、int播放器、int主题、void*数据); 在C++中,AI代码根据命令将其转换为已知大小或回调的结构,如: typedef int\uu stdcall TServerCall(

我想为一个旧游戏写一个AI,在Rust中。此游戏的AI是库,在其Linux端口中它只是一个
。因此
文件导出:

extern“C”void客户端(int命令、int播放器、void*数据);
void*数据
可以是struct(取决于
命令
),也可以是此函数:

typedef int-TServerCall(int命令、int播放器、int主题、void*数据);
<>在C++中,AI代码根据命令将其转换为已知大小或回调的结构,如:

typedef int\uu stdcall TServerCall(int命令、int播放器、int主题、void*数据);
或结构:

//其中G是外部TNewGameData G;
G=*(TNewGameData*)数据;
然后我可以访问
G
的字段或其他结构或数组

问题:


如何将
void*
格式的数据强制转换为Rust中的结构或函数?

您可以在Rust中强制转换原始指针

use libc::{c_void, c_int};

#[repr(C)]
struct TNewGameData {
    // the fields go here
}

#[no_mangle]
pub extern "C" fn client(command: c_int, player: c_int, data: *mut c_void) {
    // Cast raw pointer to the right type.
    let game_data_ptr = data as *mut TNewGameData;
    // Convert to Rust reference.
    let game_data = unsafe { &mut *data };
}

相关问题:我可以使用这种方法将其强制转换为函数吗?