Ich versuche, ein .NET-Objekt in einem COM-Objekt zu aggregieren (die äußere unbekannt) mit dem folgenden Code:Warum bin ich ein ExecutionEngineException bekommen, wenn COM-Aggregation versucht
Object obj = ... // some ComVisible .NET object
var comObj = (IMyComInterface)Activator.CreateInstance(Type.GetTypeFromProgID("some.progid"));
var unknown = Marshal.GetIUnknownForObject(comObj);
var innerUnknown = Marshal.CreateAggregatedObject(unknown, obj);
// This is where the ExecutionEngineException is thrown.
var aggObj = Marshal.GetObjectForIUnknown(innerUnknown);
// Make outer object aware of our dotnet object, say.
comObj.DotNetObj = aggObj;
Marshal.Release(unknown);
...
Gibt es etwas „offensichtlich“ falsch mit diesem Code? Diese Ausnahme lässt mich sehr wenig weiter. Ärgerlich ist auch, dass die Ausnahme nicht immer passiert, obwohl es öfter passiert. Gibt es einen anderen Weg, dies zu erreichen? (dh maragle das innereUnknown IntPtr zu meinem COM-Objekt)
HINWEIS: Ich muss Version 2 des Frameworks und nicht Version 4 ausprobiert haben, und bin, soweit ich weiß, auf dem neuesten Stand.
Versuchen Sie 'comObj.DotNetObj = innerUnknown;'. Der Aufruf von "GetObjectForIUknown" ist nicht erforderlich. – Ben