Wir haben eine große VB6-Anwendung, und da wir Dinge ändern/reparieren müssen, verschieben wir Abschnitte zu. NET, Targeting das Framework 2.0. Wir haben eine Reihe von Klassen in eine .net-DLL verschoben, und sie sind so eingerichtet, dass sie für com verfügbar sind..Net COM DLL funktioniert nicht von vb6 über appdomains
Hier ist das Problem: MainAppVB6.exe instanziiert DOTNET_COM.ComClass. Es übergibt dies an eine Methode in einer difference .net dll, die es über eine appdomain übergibt. Dies ist überhaupt kein Problem für COM-Objekte, die in vb6 geschrieben sind.
.net sehen Sie die appdomain Grenze, und möchte die Objekte serialisierbar sein oder marshalbyref. Da wir den .net-Teil benötigen, um Daten zu ändern, die zurück in vb6 gelangen, funktioniert serializable nicht. Wenn wir die Klassen bei Inherits MarshalByRefObject markieren, erhalten wir "Dieser Remoting-Proxy hat keine Channel-Senke, was bedeutet, dass entweder der Server keine registrierten Server-Kanäle hat oder die Anwendung keinen geeigneten Client-Kanal hat, um mit dem Server zu sprechen".
Es gibt keine Kanäle - wir gehen nur über eine appdomain in der gleichen DLL. Es scheint, dass .net das Objekt nicht als COM behandelt, was es tun sollte.
Wenn ich sowohl marshalbyref und serializable entfernen, funktionieren die Dinge nur, wenn das com-Objekt von vb6 instanziiert wird. Wenn die .NET-Funktionalität in der App-Domäne das Objekt erstellt und an vb6 zurückgegeben wird, gibt vb6 Automatisierungsfehler.
Ein sehr hässlicher Kludard ist es, das Objekt in der neuen Appdomain zu serialisieren, das XML zurückzusenden und vb6 deserialisieren zu lassen, aber das erscheint lächerlich.
Wer hat irgendwelche Ideen?
Vielen Dank.
Seth
haben, die für ein paar Eigenschaften funktionieren würde, aber der Code in der separaten Appdomain hat Dutzende von Eigenschaften zu modifizieren sowie neue Objekte zu Sammlungen hinzufügen. Es analysiert Daten, füllt das com-Objekt mit diesen Ergebnissen und gibt es an vb6 zurück. Ich neige dazu, es nur die Serialisierung zurückgeben ... –