Calling C # BHO métodos de Javascript

Estoy tratando de descubrir cómo llamar a los métodos de C # en mi objeto BHO desde Javascript dentro de la página. Encontré numerosas páginas sobre cómo hacerlo en C ++ / ATL / Com como:

Browser Helper Objetos y opciones de secuencias de comandos

¿Cómo llamar al método BHO desde Javascript?

He intentado seguirlo e implementarlo correctamente en C #, pero no puedo hacerlo funcionar probablemente debido a algunos problemas obvios de COM que tengo y que no entiendo completamente.

Estoy usando C # 4.0.

Aquí están las partes relevantes del código:

using SHDocVw;
using mshtml;
using System.Runtime.InteropServices;

[ComVisible(true),
 Guid("300736C4-DCDA-4DB0-90AD-4510A12EBBC6"),
 ClassInterface(ClassInterfaceType.None),
 ProgId("My Extension")]
public class BrowserHelperObject : IObjectWithSite
{
    const int DISPATCH_PROPERTYPUT = 4;
    const int FDEX_NAME_ENSURE = 2;
    const uint LOCALE_USER_DEFAULT = 0x0400;

    WebBrowser browser;

    ...
    public void OnDocumentComplete(dynamic frame, ref dynamic url)
    {
        ...
        var window = browser.Document.parentWindow;

        int pid = 0;
        window.GetDispId("myExtension", FDEX_NAME_ENSURE, ref pid);

        System.Runtime.InteropServices.ComTypes.DISPPARAMS dispParms = new System.Runtime.InteropServices.ComTypes.DISPPARAMS();
        dispParms.cArgs = 1;
        dispParms.cNamedArgs = 0;
        dispParms.rgvarg = ???;
        dispParms.rgdispidNamedArgs = IntPtr.Zero;
        System.Runtime.InteropServices.ComTypes.EXCEPINFO einfo = new System.Runtime.InteropServices.ComTypes.EXCEPINFO();
        window.Invoke(pid, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, ref dispParms, this, ref einfo);            
        ...
    }

Respuestas a la pregunta(4)

Su respuesta a la pregunta