Implémenter des fonctionnalités personnalisées ArcGIS avec C #?

11

Est-il possible d'implémenter des fonctionnalités personnalisées dans .NET?

Si c'est le cas, comment?

Je soupçonne que le problème est en mesure de faire une agrégation COM avec .NET, mais je ne trouve rien à ce sujet ...

Est-ce que quelqu'un sait s'il est possible de créer un Durée Wrapper appelable COM pour une classe .NET qui prend en charge COM_INTERFACE_ENTRY_AGGREGATE_BLIND?

Kirk Kuykendall
la source
Ne seriez-vous pas en train de créer un wrapper appelable COM (CCW) plutôt qu'un wrapper appelable à l'exécution (RCW), puisque vous allez publier une co-classe managée (.NET) dans un cadre non géré (ArcObjects)?
stakx
J'ai mis à jour ma réponse pour refléter les nouvelles fonctionnalités de .NET 4 où la mise en œuvre de l'agrégation COM est réellement possible.
Petr Krebs
De plus, même si je n'ai aucune preuve pour cela, il semble que Managed C ++ vous accorde plus de liberté lorsque vous traitez avec COM. Au cas où vous ne trouveriez pas un bon moyen de le faire avec C #, vous pourriez jeter un œil à Managed C ++ pour les éléments critiques de code.
stakx

Réponses:

4

Vous ne pourrez pas implémenter l'agrégation COM pure dans .NET 3.5 ou inférieur, mais vous aurez peut-être de la chance dans .NET 4, qui ajoute la nouvelle interface ICustomQueryInterface , vous permettant de rediriger correctement les requêtes d'interface. Plus d'informations avec un échantillon inclus peuvent être trouvées sur codeplex .

Je recommande également de suivre l' exemple de documentation C ++ ESRI . Le lien est pour 9.0, mais je soupçonne que cet échantillon particulier n'a pas changé d'un bit.

Petr Krebs
la source
Étant donné que ce problème m'intéresse beaucoup, je vais essayer de porter l'échantillon d'ESRI sur .NET 4 C #.
Petr Krebs
Hé Petr, ce serait génial d'avoir une version C # de l'échantillon! Même si les ArcGIS 10.0 PIA sont pour 3.5, je suppose que les fonctionnalités personnalisées peuvent toujours être 4.0 (?) Je vais ajouter une prime à cette question dans quelques jours.
Kirk Kuykendall
@Petr comment cet échantillon arrive;)
blah238
@ blah238: il s'est avéré que ce n'était pas aussi simple que ça en avait l'air ..;) Il n'y a pas beaucoup de documentation ou d'exemples sur l'agrégation .NET COM. J'essaierai d'y revenir.
Petr Krebs
@Kirk: BTW - Nous avons rencontré des problèmes vraiment étranges lors de la tentative d'extensions en utilisant .NET 4 - donc je ne le recommanderais pas. J'ai fini par devoir rétroporter une tonne de notre code vers 3.5sp1 pour que les choses fonctionnent correctement, au moins avec 10sp1. (Un exemple - l'abonnement à certains événements de document, et ne rien faire d'autre, désactivera les menus contextuels d'ArcMap - même s'il s'agit d'une fonctionnalité totalement indépendante ...)
Reed Copsey