Random IRC quote :      <Skool> querias decir que eres una zorrita, admitelo

Los otros bugs…

marrciaaaaaaaaaalEl otro día lo hablaba con Gabriel, no hay cosa que joda más que estar programando y volverte loco con algo que no sale, un error tonto o «no tan tanto», y después de 2 horas darte cuenta que te faltaba una «,» en el módulo «n» allí donde cristo perdió el mechero…

Pero es que a veces todo se junta para «boicotearte» la movida. Así que para que no le pase a otro sufrido programador escribo este post.

Estaba ahi liado con un proyecto que lleva un WebBrowser embebido, básicamente para que nos entendamos esto es el core del Internet Explorer pero sin la «carcasa».

Para tener el control sobre determinados eventos que van surgiendo hay que implementar la interface DWebBrowserEvents2 que tiene varios métodos, uno de los cuales me interesaba tener controlado: FileDownload.

void FileDownload(      
    VARIANT_BOOL *ActiveDocument,
    VARIANT_BOOL *Cancel
);
 

La declaración es de la MSDN por lo que supuse que era la correcta vamos, así que instalo el handler para el evento

ON_EVENT(       CHtmlView,
                      BROWSERINDENAI,
                      DISPID_FILEDOWNLOAD,
                      FileDownload,
                      VTS_PBOOL  // Atencion a este campo
                      VTS_PBOOL)
 

pero nada de nada. Al handler que instalo no lo llama ni perri. Este método tiene algún bug conocido y documentado así que después de hacer mil historias y que todo siguiera igual ya empecé desde el principio. Siempre suele ser lo menos complicado pero por algún extraño motivo siempre tendemos a dejar la opción mas sencilla (pero menos previsible) para el final ( ¿alguien me lo puede explicar? ).

Asi que lo primero que hice fue sacar el oleview.exe y ver como estaba definida la interface DWebBrowserEvents2 y el método que me estaba tocando las narices

        [id(0x0000010e), helpstring("Fired to indicate the File Download dialog is opening")]
        void FileDownload(
                        [in] VARIANT_BOOL ActiveDocument, /// aaaaaaaaaaaa interneeeel quien tenvia?
                        [in, out] VARIANT_BOOL* Cancel);
 

¡Acabáramos, en la MSDN estaba mal la declaración! Como podéis ver más arriba era un VARIANT_BOOL* y no un VARIANT_BOOL. Asi que cambio la declaración a como nos muestra el oleview y voilà, funciona. Por fin.

6 Comentarios para “Los otros bugs…”

  1. Comment por Amian | 10/25/07 at 3:47 pm

    Orale! Menuda chingada de la MSDN. Lo bueno es que lograstelo solucionar! Enchiba la mina!

  2. Comment por ruben | 10/25/07 at 3:48 pm

    ese amian de moda xDDDDDD

  3. Comment por Naima | 10/25/07 at 3:52 pm

    Bien chingado wey, ahorita mismo estaba teniendo problemas con la misma cosa.

    p.s: Besos para amian :*

  4. Comment por Interneeeerl | 10/26/07 at 11:46 am

    Vienes a por mi?

  5. Comment por Amian | 10/30/07 at 11:39 am

    Naima te invito a comer unos tacos wey

  6. Comment por Aznarovich | 11/07/07 at 4:12 pm

    Вся власть Советам!!

Se han cerrado los comentarios