gpt4 book ai didi

c# - 无法在 Outlook VSTO 中使用 PropertyAccessor 设置项目日期时间(如 PT_SYSTIME)

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:36 25 4
gpt4 key购买 nike

使用以下代码将 Outlook 中的日期时间列设置为 c# 日期时间值

documentItem.PropertyAccessor.SetProperty(
"http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/TestDate/0x0000001F",
documentItem.PropertyAccessor.LocalTimeToUTC(DateTime.Now));

将列值转换为 PT_APPTIME 类型,在 Outlook-Tableview 中无法显示、排序等。

我所有尝试将该值设置为 PT_SYSTIME(例如,创建我自己的 PROPVARIANT 结构、Marshal.StructureToPtr 等)都因各种异常而失败。

有没有一种方法可以在不使用赎回库的情况下设置日期时间值,这对于这个目的来说有点过分了?

最佳答案

我前段时间遇到过同样的问题;在使用 PropertyAccessor 进行多次试验和错误后,我求助于将 MailItemMAPIOBJECT 属性传递给 C++/CLI 扩展中的方法库项目,因为它是组合托管对象和非托管 header 文件(即 Outlook 2010 MAPI API header )以直接使用 MAPI 接口(interface)设置属性的最简单方法。

我首先使用 Marshal::GetIUnknownForObjectMAPIOBJECT 获取一个 IUnknown* 指针,然后使用 QueryInterface 使用 IID_IMessageIID_IMAPIProp id 获取相应的接口(interface),然后使用 IMAPIPropGetIDsFromNamesSetPropsSaveChanges 来设置属性。

(我从 this codeproject article 得到了大致的想法,并根据我的需要对其进行了调整...)

考虑到 Outlook 如何处理 View 列中的 PT_APPTIME 值(即完全无法对它们执行任何操作,而只是显示空白值)我怀疑 PropertyAccessor关于日期的行为可以称为错误以外的任何东西;对于这样一个(看似)简单的操作,真的不需要花费那么多的时间......:(

关于c# - 无法在 Outlook VSTO 中使用 PropertyAccessor 设置项目日期时间(如 PT_SYSTIME),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com