Реализовать пользовательские функции ArcGIS с помощью C #?

11

Можно ли реализовать пользовательские функции в .NET?

Если так, то как?

Я подозреваю, что проблема заключается в возможности объединения COM с .NET, но я ничего не могу найти по этому поводу ...

Кто-нибудь знает, возможно ли создать время выполнения Вызываемая COM-оболочка для класса .NET, который поддерживает COM_INTERFACE_ENTRY_AGGREGATE_BLIND?

Кирк Куйкендалл
источник
Разве вы не создадите оболочку, вызываемую COM (CCW), а не оболочку, вызываемую во время выполнения (RCW), так как вы собираетесь опубликовать управляемый (.NET) совместный класс в неуправляемой среде (ArcObjects)?
Stakx
Я обновил свой ответ, чтобы отразить новые функции в .NET 4, где реализация агрегации COM фактически возможна.
Петр Кребс
Кроме того, хотя у меня нет никаких доказательств этого, похоже, что Managed C ++ предоставляет вам больше свободы при работе с COM. В случае, если вы не нашли хороший способ сделать это с C #, вы можете взглянуть на Managed C ++ для критических частей кода.
Stakx

Ответы:

4

Вы не сможете реализовать чистое агрегирование COM в .NET 3.5 или ниже, но вам может повезти в .NET 4, в которой добавлен новый интерфейс ICustomQueryInterface , позволяющий правильно перенаправлять запросы интерфейса. Более подробную информацию, включая образец, можно найти на codeplex .

Я также рекомендую идти по DOCS C ++ ESRI образца . Ссылка для 9.0, но я подозреваю, что этот конкретный образец не изменился ни на один бит.

Петр Кребс
источник
Поскольку эта проблема меня очень интересует, я попытаюсь перенести образец ESRI на .NET 4 C #.
Петр Кребс
Привет, Петр, было бы здорово иметь C # версию примера! Даже при том, что ArcGIS 10.0 PIA предназначены для 3.5, я думаю, что пользовательские функции все еще могут быть 4.0 (?) Я добавлю награду за этот вопрос через пару дней.
Кирк Кайкендалл
@Petr, как этот образец идет;)
blah238
@ blah238: оказалось, что это не так просто, как выглядело ...;) Существует не так много документации или примеров относительно агрегации .NET COM. Я постараюсь вернуться к нему.
Петр Кребс
@Kirk: Кстати: мы столкнулись с некоторыми действительно странными проблемами при попытке сделать расширения с использованием .NET 4 - поэтому я бы не рекомендовал это делать. В итоге мне пришлось перенести тонну нашего кода на 3.5sp1, чтобы все работало правильно, по крайней мере с 10sp1. (Один пример - подписка на определенные события документа и больше ничего не делает, отключит меню правой кнопки мыши в ArcMap - даже если это совершенно не связано с функциональностью ...)
Рид Копси,