POC 使用rust编写mathematica库函数
程序员文章站
2022-04-01 10:25:16
...
参考之前的文章:Mathematica 使用C语言编写库函数教程 带示例
主要是实现三个接口和自己的函数就可以了,至于头文件可以用 bindgen 生成对应的代码,我这里糊了个最小实现。
use std::ffi::c_void;
const LIBRARY_NO_ERROR: i32 = 0;
#[repr(C)]
pub union MArgument {
integer: *mut i32,
real: *mut f64,
}
#[no_mangle]
pub extern "C" fn WolframLibrary_getVersion() -> i32 {
5
}
#[no_mangle]
pub extern "C" fn WolframLibrary_initialize(_lib_data: *mut c_void) -> i32 {
LIBRARY_NO_ERROR
}
#[no_mangle]
pub extern "C" fn WolframLibrary_uninitialize(_lib_data: *mut c_void) {}
// fun = LibraryFunctionLoad["mmalib.dll", "fun", {Integer}, Integer]
// fun[100]
#[no_mangle]
pub extern "C" fn fun(
_lib_data: *mut c_void,
argc: i32,
args: *mut MArgument,
res: MArgument,
) -> i32 {
let n = unsafe { *(*args).integer };
let s = (1..n + 1).sum();
unsafe { *res.integer = s }
LIBRARY_NO_ERROR
}