Я пытаюсь создать 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 все работает!
cdylib
было бы даже более правильным ^^ doc.rust-lang.org/ ссылка/linkage.html - person hellow   schedule 19.12.2018cdylib
и правильную цель... Что-то не так с вашей настройкой. Трижды проверьте правильность пути (используйте более простой путь, напримерD:\lib.dll
) и используйтеrustc --crate-type=cdylib --target=x86_64-pc-windows-msvc
(и убедитесь, что вы используете 64-разрядную версию Excel, взглянув в диспетчер задач!) - person hellow   schedule 19.12.2018