欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
}

相关标签: Mathematica 其他