Ale*_*hov 2 .net objective-c rust
我觉得它有可能(创建一个可以在.NET和Objective-C中使用Rust的库),但经过几个小时的谷歌搜索后,我仍然没有清楚如何这样做的图片.
有没有人有这样的经验(编译从Win32/Win64 .NET(P/Invoke),MacOSX和iOS应用程序使用的Rust库)?
考虑到外部用法而编写的Rust库在ABI中与C库无法区分,因此您可以使用自然语言的FFI工具.对于Objective-C,我相信,编写一个头文件就足够了,该头文件列出了库公开的函数,然后像链接其他一些C库一样链接库.
要提供正确的C接口,您需要编写extern对C类型进行操作的函数.通过一些注释,这些函数将被公开为C函数,可由任何知道如何调用C函数的外部代码调用.即使您将库编译为共享对象然后动态加载它也应该工作(我认为您无论如何都需要它与.NET进行互操作).
例如,这是可以编写外部可用功能的方式:
#[repr(C)]
struct Foo {
x: c_int,
y: c_double
}
#[no_mangle]
unsafe extern fn frobnicate(foo: *const Foo) -> Foo {
Foo {
x: foo.x * 2,
y: foo.y / 2.0
}
}
Run Code Online (Sandbox Code Playgroud)
#[no_mangle]禁用名称修改,extern(相当于extern "C")定义调用约定,#[repr(C)]强制C字段布局到结构.当包含此代码的包被编译到库中时,frobnicate将作为函数符号公开,而其他一些程序将能够通过相应的FFI接口调用它.
我想,这些链接对您有所帮助:
std| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |