Rust로 Outlook COM 애드인 만들기: 초보자를 위한 단계별 가이드 (55자)
# 📌 서론 – 왜 Rust와 Outlook COM을 연결해야 할까?
Outlook은 기업 업무의 핵심 도구이며, COM (Component Object Model) 을 통해 다양한 기능을 확장할 수 있습니다.
하지만 전통적으로 C#이나 C++ 같은 언어가 주로 사용되어 왔죠.
최근 Rust 가 메모리 안전성과 뛰어난 성능으로 주목받으면서, “Rust로 Outlook 애드인을 만들 수 있을까?” 하는 질문이 떠올랐습니다.
이번 글에서는 Rust 로 COM 인터페이스를 구현해 Outlook 애드인을 만드는 전 과정을 초보자도 이해할 수 있도록 차근차근 풀어보겠습니다.
핵심 키워드:
Rust COM,Outlook 애드인,Rust Outlook Add-in
# 🛠️ 1. 사전 준비 – 개발 환경 설정하기
| 항목 | 내용 | 설치 방법 |
|------|------|-----------|
| Rust | 최신 안정 버전 | rustup update |
| cargo‑winrt | Windows API 바인딩 도구 | cargo install cargo-winrt |
| Visual Studio Build Tools | C++ 빌드 툴 (linker 필요) | 공식 사이트에서 “Desktop development with C++” 선택 |
| Outlook | 테스트용 Outlook 365/2019 | 이미 설치돼 있다면 OK |
Tip:
rustup target add x86_64-pc-windows-msvc로 Windows 타깃을 추가해 주세요.
# 📦 2. COM 인터페이스 정의 – IDL 파일 만들기
COM 객체는 IDL (Interface Definition Language) 로 인터페이스를 정의합니다.
아래 예시는 Outlook에서 메일을 읽고 제목을 로그에 남기는 간단한 인터페이스입니다.
idl
// OutlookAddin.idl
import 'oaidl.idl';
import 'ocidl.idl';
[
object,
uuid(6A2F9C4E-7B1A-4D3F-9E6C-1A2B3C4D5E6F),
oleautomation,
helpstring('Rust Outlook Add-in Interface')
]
interface IOutlookAddin : IDispatch {
HRESULT LogMailSubject([in] BSTR subject);
};
midl 로 컴파일하면 .h 와 .tlb 파일이 생성됩니다.
bash
midl OutlookAddin.idl
# 🧩 3. Rust 프로젝트에 COM 바인딩 연결하기
# 3‑1. winapi 와 com-rs 의존성 추가
Cargo.toml 에 다음을 입력합니다.
toml
[dependencies]
winapi = { version = '0.3', features = ['com', 'oleaut32'] }
com-rs = '0.5'
# 3‑2. 인터페이스 구현
rust
use com::interfaces::iunknown::IUnknown;
use com::sys::{HRESULT, S_OK};
use com::{com_interface, ComPtr};
com_interface! {
#[uuid('6A2F9C4E-7B1A-4D3F-9E6C-1A2B3C4D5E6F')]
pub unsafe interface IOutlookAddin: IUnknown {
fn LogMailSubject(&self, subject: *const u16) -> HRESULT;
}
}
pub struct OutlookAddin;
impl IOutlookAddin for OutlookAddin {
fn LogMailSubject(&self, subject: *const u16) -> HRESULT {
unsafe {
let s = widestring::U16CStr::from_ptr_str(subject);
println!('메일 제목: {}', s.to_string_lossy());
}
S_OK
}
}
위 코드에서는 com-rs 매크로를 이용해 COM 인터페이스를 구현하고, LogMailSubject 메서드가 호출될 때 콘솔에 제목을 출력합니다.
# 3‑3. DLL 빌드 및 레지스트리 등록
bash
cargo build --release
생성된 outlook_addin.dll 을 regsvr32 로 등록합니다.
bash
regsvr32 target\release\outlook_addin.dll
레지스트리 키는 HKCR\CLSID\{6A2F9C4E-7B1A-4D3F-9E6C-1A2B3C4D5E6F} 아래에 자동으로 만들어집니다.
# 📧 4. Outlook에서 애드인 로드하기
Outlook → 파일 → 옵션 → 추가 기능
COM 애드인 선택 후 이동 클릭
추가 버튼을 눌러 방금 등록한
outlook_addin.dll선택
이제 새로운 메뉴나 버튼을 만들지는 않았지만, Outlook이 메일을 열 때마다 LogMailSubject 를 호출하도록 이벤트 핸들러를 연결하면 됩니다.
예를 들어 ItemAdd 이벤트에서 IOutlookAddin::LogMailSubject 를 호출하도록 VBA 혹은 C# 브리지를 만들 수 있습니다.
# 🏁 결론 – Rust COM 애드인, 이제 시작해 보세요!
안전성: Rust의 메모리 안전성 덕분에 COM 버그(특히 포인터 오류)를 크게 줄일 수 있습니다.
성능: 네이티브 코드와 동일한 속도를 제공하므로 대용량 메일 처리에도 강합니다.
생태계:
winapi,com-rs,cargo-winrt같은 도구가 점점 풍부해지고 있어, 앞으로 더 복잡한 Outlook 플러그인도 충분히 구현 가능합니다.
다음 단계: 이번 글에서 만든 기본 인터페이스에 UI 버튼을 추가하고, 실제 메일 본문을 편집하는 기능을 구현해 보세요.
행동 유도: 오늘 소개한 레포지토리를 GitHub 에 포크하고, 직접 빌드해 본 뒤 질문이 있으면 댓글로 알려 주세요! 🎉
키워드: Rust COM, Outlook 애드인, Rust Outlook Add-in
Comments
Join the discussionNo comments yet. Be the first to comment.