使用Excel VBA从Rust DLL调用函数

时间:2018-12-19 08:37:17

标签: excel vba dll rust stdcall

我正在尝试创建Rust DLL,并从64位Excel(Windows 10和Office 365)调用这些函数。

当前,我的lib.rs如下所示:

#[no_mangle]
pub extern "stdcall" fn square(x: f64) -> f64 {
    {x * x}
}

我正在使用命令进行编译:

rustc --crate-type=cdylib lib.rs

我的VBA代码如下:

Private Declare PtrSafe Function square Lib "C:\Users\user\rust\excelfunctions\src\lib.dll" (ByVal x As Double) As Double

Sub testsquare()
    MsgBox square(10)
End Sub

Excel通过始终给出相同的错误来“帮助”我调试此问题:

Run-time error '48':

File not found. C:\Users\user\rust\excelfunctions\src\lib.dll

我显然已经检查了文件是否存在,并且可以通过DLL Export Viewer看到该功能。如果将文件替换为C库,则可以使函数正常工作。我也设法与Haskell配合使用,所以我知道Excel正在与外界交流,在给出错误消息时,它只是在说些更具体的事情。

我花了很多时间来尝试所有可能的组合。如果回答这个问题的人首先要仔细检查所提出的解决方案是否确实在他/她的机器上工作,我将不胜感激,这样我们就不会以很长的乒乓球问题和“没有”答案结束(已经在那里)。只是不可能在这里列出我已经尝试过的所有可能的变体。

编辑:我在“设置”->“应用和功能”中安装了Rust Nightly,这使我的设置有些混乱。卸载Nightly后,一切正常!

1 个答案:

答案 0 :(得分:1)

我在Windows 10的“设置”->“应用程序和功能”中,每夜明确地安装了一些Rust,这使我的设置有些混乱。卸载Nightly后,一切正常。