我如何用 DispId 修饰 属性 (get 和 set?两者都不是?)

How do I decorate a property with DispId (both get and set? neither?)

   [DispId(8)]
    DateTime MaxDate { [DispId(8)] get; [DispId(8)] set; }

get 和 set 是否应该具有不同的 DispId,因为它们是两个不同的函数?还是只修饰方法名一次?

不,属性 应该只有一个 [DispId],应用于 属性 声明。客户端代码通过为 IDispatch::Invoke() 调用中的 wFlags 参数传递 DISPATCH_PROPERTYGET 或 DISPATCH_PROPERTYPUT 来指示它是要调用 getter 还是 setter。

并不是说在getter和setter上重复[DispId]是完全错误的,Tlbexp.exe也支持,只是没有多大用处感觉这样做。使用 不同的 dispids 在技术上是可行的,但几乎可以保证使客户端代码失败,因为它不会期望那样。