使用C#实现ArcGIS自定义功能?


11

是否可以在.NET中实现自定义功能

如果是这样,怎么办?

我怀疑问题是可以通过.NET 进行COM聚合,但是我在那上找不到任何东西...

有谁知道是否可以创建一个 运行 支持COM_INTERFACE_ENTRY_AGGREGATE_BLIND的.NET类的COM可调用包装器?


因为要将托管(.NET)联合类发布到非托管框架(ArcObjects),所以您不是要创建COM调用包装(CCW)而不是运行时调用包装(RCW)吗?
stakx 2010年

我更新了答案,以反映.NET 4中实际上可以实现COM聚合的新功能。
彼得·克雷布斯

另外,尽管我对此没有任何证据,但似乎托管C ++在处理COM时为您提供了更多自由。如果您找不到使用C#执行此操作的好方法,则可以查看Managed C ++中的关键代码段。
stakx 2010年

Answers:


4

您将无法在.NET 3.5或更低版本中实现纯COM聚合,但是在.NET 4中可能会很幸运,因为它添加了新的ICustomQueryInterface接口,允许您正确地重定向接口查询。可以在codeplex上找到包含样本的更多信息。

我还建议继续进行C ++ ESRI docs 示例。该链接适用于9.0,但我怀疑此特定示例没有改变一位。


由于这个问题使我非常感兴趣,因此,我将尝试将ESRI的示例移植到.NET 4 C#。
彼得·克雷布斯

嘿,Petr,拥有该示例的C#版本真是太好了!即使ArcGIS 10.0 PIA的版本为3.5,我想自定义功能仍可以是4.0(?)。我将在两天内为这个问题添加赏金。
Kirk Kuykendall,2010年

@Petr那个样品怎么样?)
blah238

@ blah238:事实并非如此。.;)那里没有太多有关.NET COM聚合的文档或示例。我会尝试回到它。
Petr Krebs

@Kirk:顺便说一句-尝试使用.NET 4进行扩展时,我们遇到了一些非常奇怪的问题-因此,我不建议这样做。我最终不得不将大量代码移植到3.5sp1,以使事情正常运行,至少在10sp1下。(一个示例-订阅某些文档事件,而不执行其他任何操作,将禁用ArcMap中的右键菜单-即使它是完全不相关的功能...)
Reed Copsey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.