本文面向已经踩过 VSTO 或 C++ COM 加载项、想把内存安全真正落到 DLL 边界的开发者。阅读前请确保:1. 机器上仍有 regsvr32;2. 能接受在
unsafe里写三行代码。
一、为什么还在用 COM:新旧 Outlook 生态现状
2025 年的官方口径是 “新 Outlook 已全面 Web 化”,但企业内网里经典版(Win32)仍占 70% 以上。微软在 Ignite 上公布的数字更直接:90% 的巨型企业因 “离线 MAPI 依赖” 拒绝切换。只要经典版还在,COM 加载项就是唯一能在启动阶段注入进程、无窗口也能收邮件的方案。换句话说,Web 加载项跑在沙盒,COM 加载项跑在信任边界,想做 “邮件落盘前拦截” 或 “日历写回审校”,只能走 COM。
二、最小可运行骨架:从 DLL 入口到 IDTExtensibility2 的 Rust 映射
Rust 没有官方 COM 框架,但 windows 0.58 已能一次性生成 Outlook 15.0 类型库。下面 60 行代码是能在 Outlook 2021 启动时弹 MessageBox 的最小 DLL:
// lib.rs
#![cfg(windows)]
#![no_std] // 关掉 std,把驻留内存压到 700 KB 以下
use core::ffi::c_void;
use windows::core::*;
use windows::Win32::System::Com::*;
use windows::Win32::Foundation::*;
#[no_mangle]
pub extern