使用Rust + Electron开发跨平台桌面应用 ( 二 )

本文介绍了如何使用FFI在Rust和Electron之间进行跨语言交互,避免版本匹配问题。通过#[no_mangle]防止Rust函数名混淆,设置Cargo.toml生成动态链接库,然后利用ffi-napi在JavaScript中调用Rust编译的dylib。尽管FFI可能导致类型安全问题,但通过Box包装类型可以缓解这一问题。
摘要由CSDN通过智能技术生成

前言

在上一篇文章使用Rust + Electron开发跨平台桌面应用 ( 一 )中,我们将Rust + Electron结合起来,使用Rust编写核心业务逻辑,并编译成node库提供给Electron的UI界面调用,但是在上一篇文章中发现遇到了很多问题,尤其是Electron 的版本和 Rust编译出来的版本必须要一致,否则会无法调用成功,这就很坑了,所以为了改变这一情况,今天我们将使用另一种方式将Rust的代码提供给Js进行调用,这就是FFI。

FFI是什么

FFI(Foreign Function Interface)是用来与其它语言交互的接口,由于现实中很多程序是由不同编程语言写的,必然会涉及到跨语言调用,这时一般有两种解决方案:

1、将函数做成一个服务,通过进程间通信(IPC)或网络协议通信(RPC, RESTful等);

2、直接通过 FFI 调用。

前者需要至少两个独立的进程才能实现,而后者直接将其它语言的接口内嵌到本语言中,所以调用效率比前者高。

Rust作为系统级编程语言,也是对FFI提供了完善的支持。

mangle

由于rust支持重载,所以函数名会被编译器进行混淆,就像c++一样。因此当你的函数被编译完毕后,函数名会带上一串表明函数签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值