1use windows::Win32::{Foundation::*, System::LibraryLoader::*};
9
10#[cfg(feature = "olmapi32")]
11mod load_mapi;
12
13fn get_mapi_module() -> HMODULE {
14 use std::sync::OnceLock;
15 use windows_core::*;
16
17 static MAPI_MODULE: OnceLock<usize> = OnceLock::new();
18 HMODULE(*MAPI_MODULE.get_or_init(|| unsafe {
19 #[cfg(feature = "olmapi32")]
20 if let Ok(module) = load_mapi::ensure_olmapi32() {
21 return module.0 as usize;
22 }
23
24 LoadLibraryW(w!("mapi32"))
25 .expect("mapi32 should be loaded on demand")
26 .0 as usize
27 }) as *mut _)
28}
29
30#[cfg(feature = "olmapi32")]
31pub use load_mapi::ensure_olmapi32;
32
33#[cfg(feature = "olmapi32")]
34pub mod installation;
35
36#[macro_use]
37extern crate outlook_mapi_stub;
38
39#[allow(
40 non_snake_case,
41 non_upper_case_globals,
42 non_camel_case_types,
43 dead_code,
44 clippy::all
45)]
46pub mod Microsoft {
47 pub mod Office {
48 pub mod Outlook {
49 pub mod MAPI {
50 pub mod Win32 {
51 mod windows_link {
52 macro_rules! link_mapi {
53 ($library:literal $abi:literal fn $($function:tt)*) => (
54 #[delay_load(name = $library)]
55 extern $abi {
56 pub fn $($function)*;
57 }
58 )
59 }
60
61 pub(crate) use link_mapi as link;
62 }
63
64 include!("bindings.rs");
65 }
66 }
67 }
68 }
69}