You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rust的windows-rs中向COM Dispatch方法传参遇问题

Outlook MailItem Move方法调用报错问题

我尝试在Outlook MailItem的Dispatch对象上调用Move方法,需要传入MAPIFolder作为参数。目前可以正常调用或获取无参数的其他方法与属性,但所有传参尝试均出现各类错误。通过GUID确认,邮件对象为_MailItem,文件夹对象为MAPIFolder,也能获取到_MailItem.Move的dispid。根据官方文档,Move方法应接收单个MAPIFolder参数,但以下示例代码执行后返回HRESULT 0x80020009异常,描述为*“Property is read-only”*,我不清楚该异常指向哪个对象的哪个属性:

let email : IDispatch = ...;
let folder : IDispatch = ...;

let args = vec![VARIANT::from(folder)];

let dispparams = DISPPARAMS {
    rgvarg : args.as_mut_ptr() as *mut VARIANT,
    rgdispidNamedArgs : null_mut() as *mut i32,
    cArgs : 1,
    cNamedArgs : 0,
};

let mut result = EXCEPINFO::default();
let mut exception = VARIANT::new();

unsafe {
email.Invoke(
    move_dispid, // Method ID
    &GUID::zeroed(), // reserved
    LOCALE_USER_DEFAULT, // constant, 0x0400
    0x01 | 0x08, // constant, Method | ByRef
    &dispparams as *const DISPPARAMS,
    Some(&mut result as *mut VARIANT),
    Some(&mut exception as *mut EXCEPINFO),
    None,
)
};

内容的提问来源于stack exchange,提问作者ricky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:19:55