Benutzerdefinierte ArcGIS-Funktionen mit C # implementieren?

11

Ist es möglich, benutzerdefinierte Funktionen in .NET zu implementieren ?

Wenn das so ist, wie?

Ich vermute, dass das Problem in der Lage ist, eine COM-Aggregation mit .NET durchzuführen, aber ich kann nichts dazu finden ...

Weiß jemand, ob es möglich ist, eine zu erstellen Laufzeit Aufrufbarer COM-Wrapper für eine .NET-Klasse, die COM_INTERFACE_ENTRY_AGGREGATE_BLIND unterstützt?

Kirk Kuykendall
quelle
Würden Sie nicht einen COM-Callable Wrapper (CCW) anstelle eines Runtime Callable Wrapper (RCW) erstellen, da Sie eine verwaltete (.NET) Co-Klasse in einem nicht verwalteten Framework (ArcObjects) veröffentlichen werden?
Stakx
Ich habe meine Antwort aktualisiert, um neue Funktionen in .NET 4 widerzuspiegeln, bei denen die Implementierung der COM-Aggregation tatsächlich möglich ist.
Petr Krebs
Auch wenn ich keinen Beweis dafür habe, scheint es, dass Managed C ++ Ihnen mehr Freiheit beim Umgang mit COM gewährt. Falls Sie mit C # keinen guten Weg finden, dies zu tun, können Sie in Managed C ++ nach den kritischen Codeteilen suchen.
Stakx

Antworten:

4

Sie können keine reine COM-Aggregation in .NET 3.5 oder niedriger implementieren, haben jedoch möglicherweise Glück in .NET 4, in dem die neue ICustomQueryInterface- Schnittstelle hinzugefügt wird, sodass Sie die Schnittstellenabfragen ordnungsgemäß umleiten können. Weitere Informationen mit einem Beispiel finden Sie auf Codeplex .

Ich empfehle auch entlang der C ++ ESRI docs fortzufahren Probe . Der Link ist für 9.0, aber ich vermute, dass sich dieses spezielle Beispiel kein Bit geändert hat.

Petr Krebs
quelle
Da mich dieses Problem sehr interessiert, werde ich versuchen, das ESRI-Beispiel auf .NET 4 C # zu portieren.
Petr Krebs
Hey Petr, das wäre toll, eine C # -Version des Beispiels zu haben! Obwohl die ArcGIS 10.0-PIAs für 3.5 sind, können benutzerdefinierte Funktionen immer noch 4.0 (?) Sein. Ich werde dieser Frage in ein paar Tagen eine Prämie hinzufügen.
Kirk Kuykendall
@Petr wie kommt das Beispiel;)
blah238
@ blah238: Es stellte sich heraus, dass es nicht so einfach ist, wie es aussah ..;) Es gibt nicht viel Dokumentation oder Beispiele zur .NET COM-Aggregation. Ich werde versuchen, darauf zurückzukommen.
Petr Krebs
@Kirk: Übrigens - Beim Versuch, Erweiterungen mit .NET 4 durchzuführen, sind einige wirklich seltsame Probleme aufgetreten - daher würde ich es nicht empfehlen. Am Ende musste ich eine Tonne unseres Codes auf 3.5sp1 zurückportieren, damit die Dinge richtig funktionieren, zumindest mit 10sp1. (Ein Beispiel - das Abonnieren bestimmter Dokumentereignisse und nichts anderes wird die Rechtsklick-Menüs in ArcMap deaktivieren - obwohl es sich um eine völlig unabhängige Funktionalität handelt ...)
Reed Copsey