Przekazanie instancji klasy C # z powrotem do kodu zarządzanego z JavaScript przez COM

Podstawowy zarys mojego problemu przedstawiono w poniższym kodzie. Hostuję formant WebBrowser w formie i dostarczamObjectForScripting dwiema metodami:GiveMeAGizmo iGiveMeAGizmoUser. Obie metody zwracają odpowiednie instancje klas:

[ComVisible]
public class Gizmo
{
    public string name { get; set; }
}

[ComVisible]
public class GizmoUser
{
    public void doSomethingWith(object oGizmo)
    {
        Gizmo g = (Gizmo) oGizmo;
        System.Diagnostics.Debug.WriteLine(g.name);
    }
}

W JavaScript tworzę instancję obu klas, ale muszę przekazać pierwszą instancję metodzie drugiej instancji. Kod JS wygląda trochę tak:

var 
    // Returns a Gizmo instance
    gizmo = window.external.GiveMeAGizmo(),

    // Returns a GizmoUser instance
    gUser = window.external.GiveMeAGizmoUser();

gizmo.name = 'hello';

// Passes Gizmo instance back to C# code
gUser.doSomethingWith(gizmo);

To tam uderzyłem w ścianę. Moja metoda C #GizmoUser.doSomethingWith() nie można oddać obiektu z powrotem do typu Gizmo. Zgłasza następujący błąd:

Nie można rzutować obiektu COM typu „System .__ ComObject” na typ interfejsu „Gizmo”

Nie wiem, jak postępować, wypróbowałem kilka innych rzeczy:

Bezpieczne odlewanieGizmo g = oGizmo as Gizmo; (g jestnull)Zaimplementowanie klasIDispatch i wołanieInvokeMember, tak jakwyjaśniono tutaj. Członkiem „nazwa” jestnull.

Potrzebuję tego do pracy z wersją .NET Framework niższą niż 4.0, więc nie mogę z niej korzystaćdynamic. Czy ktoś wie, jak mogę to osiągnąć?

questionAnswers(2)

yourAnswerToTheQuestion