【问题标题】:Does .NET have predefined constant values for DispIds?.NET 是否有预定义的 DispId 常量值?
【发布时间】:2018-10-15 05:09:44
【问题描述】:

DispId attribute 可以传递某些值,这些值赋予使用您的 COM 对象的任何人特定的含义。

例如,here is one example

典型的建议似乎只是硬编码适合您目的的“幻数”。但由于 .NET 包含了 DispIdAttribute ,我期待一个常量列表随之而来——但一直找不到。这种事情存在吗?

为了记录,我正在谈论的 DispId 值是:

DISPID_COLLECT         -8    
DISPID_CONSTRUCTOR     -6    
DISPID_DESTRUCTOR      -7    
DISPID_EVALUATE        -5     
DISPID_NEWENUM         -4    
DISPID_PROPERTYPUT     -3    
DISPID_UNKNOWN         -1    
DISPID_VALUE            0

参考https://msdn.microsoft.com/en-us/library/windows/desktop/ms221242(v=vs.85).aspx

【问题讨论】:

  • 如果我记得我以前的 VB6 日子,很确定这些值也是神奇的数字:/
  • 我几乎可以肯定没有。即使是您链接中的 MSDN 示例也只使用纯整数文字
  • 预计只有其中两个会被客户端应用程序使用。 DISPID_VALUE 表示默认属性,在 C# 中是索引器。 DISPID_NEWENUM 表示迭代器,在 C# 中实现 IEnumerator 时会自动获取。这些分配是自动的,无需使用 [DispId],因此框架中没有相应的声明。

标签: c# .net com interop


【解决方案1】:

我刚刚使用 .NET Reflector 在 .NET 框架的所有程序集中搜索“dispid”。似乎没有公开这些标准 DISPID 的 public 常量或枚举。有几个内部类——System.Dynamic.ComDispIdsSystem.Windows.Forms.NativeMethods+ActiveX——公开了这些常量,但如果不进行反思,你就无法获得它们。

【讨论】:

  • 聪明的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多