前提・実現したいこと
Rustを使用してWindowsのDLLを作成し、それをExcelのVBAから呼ぶことを考えています。
発生している問題・エラーメッセージ
DLLをビルドできましたがVBAから呼ぶ際に「ファイルがみつかりません」というエラーが出ます。DLLのパス自体は間違っていないで、どうもDLL内の関数が見つからないためこのエラーが出ているようです。
Visual StudioでC#のプロジェクトを作って同じDLLを呼び出すと「XXX.dll' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)'」となっているのでEXCELの問題ではないと思います。
RustでWindowsのDLLを作成するには何が足りないのかを教えてください。
該当のソースコード
DLL部分は hello.rs という名前で次のように記述しています。
Rust
1#[no_mangle] 2pub extern "system" fn hello(count: i32) -> i32 { 3 if count < 0 { 4 return 0; 5 } 6 return 1; 7} 8 9#[no_mangle] 10pub extern "system" fn hello2() { 11}
Cargo.toml は次のように設定しています。
Cargo.toml
1[package] 2name = "main" 3version = "0.1.0" 4authors = [""] 5 6[lib] 7name = "hello" 8path = "src/hello.rs" 9crate-type = ["dylib"] 10
EXCELのVBAは次のコードです
vba
1#If Win64 Then 2 ' 64Bit ?? 3 #Else 4 ' 32Bit ?? 5 Private Declare Function hello2 Lib "(ここはフルパスです)\hello.dll" (ByVal a As Long) As Long 6#End If 7 8Sub test() 9 C = hello(1) 10 hello2 11End Sub 12
試したこと
ビルドしたDLLをDependency Walkerで調べてみると、次のエラーが出ました。
Error: At least one required implicit or forwarded dependency was not found.
Warning: At least one delay-load dependency module was not found.
hello,hello2の関数がDLLの中にあることは出力されています。
補足情報(FW/ツールのバージョンなど)
開発環境はVSCでWindows10 64bitで開発しています。
EXCELは2010の32bit版
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。