swf mittels activeX einbinden



  • Guten Abend,
    ich will ein flash-file in mein programm einbinden, um ein wenig "Feeling" hineinzubekommen. Zum Einbeziehen von activeX-Elementen habe ich schon dies gefunden:

    // ... 
    // Für ActiveX 
    #include <atlbase.h> 
    CComModule _Module; 
    #include <atlcom.h> 
    #include <atlhost.h> 
    // ... 
    // Am Anfang von WinMain: 
    _Module.Init(0,hInst); 
    AtlAxWinInit(); 
    // ... 
    // Browser-Control erstellen: 
    m_hBrowser = CreateWindowEx(0,TEXT("AtlAxWin"),
                                 TEXT("{8856F961-340A-11D0-A96B-00C04FD705A2}"),
                                WS_CHILD | WS_BORDER | WS_VISIBLE,
                                0,0,200,200,
                               hParent,(HMENU) MY_BROWSER_ID,hInst,0); 
    // ...
    // ... 
    // Am Ende von WinMain: 
    AtlAxWinTerm(); 
    _Module.Term();
    

    Leider bekomme ich jedoch beim CreateWindowEx-Aufruf kein HWND zurück. Würde es im Falle des Gelingens von CreateWindow genügen, die in diesem Codeschnipsel verwendete CLSID für den Browser durch die für Flash zu ersetzen? 😕

    Bin für jede Hilfe dankbar
    Pablo



  • Was bekommst nach dem Fehlschlag von CreateWindowEx für einen Fehlercode von GetLastError geliefert? Welches Entwicklungs-Werkzeug verwendest Du?



  • Hi king,
    GetLastError liefert mir den Wert 1407. Ich arbeite unter Windows XP mit Visual Studio.NET (ist glaub' ich eine testversion, die ich habe).

    Pablo



  • Genau so habe ich mir das gedacht. In den neueren ATL-Versionen hat sich der Name der Fensterklasse geändert( ab VS .NET). Der Fehler 1407 bedeutet:

    <winerror.h> schrieb:

    //
    // MessageId: ERROR_CANNOT_FIND_WND_CLASS
    //
    // MessageText:
    //
    //  Cannot find window class.
    //
    #define ERROR_CANNOT_FIND_WND_CLASS      1407L
    

    Die Abhilfe ist ganz einfach. Du gibst den Namen der Fensterklasse nicht mehr direkt an, sondern lässt ihn Dir von der statischen Methode GetWndClassName aus CAxWindow liefern (sollte auch mit den ältern Versionen des VS funktionieren):

    m_hBrowser = CreateWindowEx(0, CAxWindow::GetWndClassName(), TEXT("{8856F961-340A-11D0-A96B-00C04FD705A2}"), ...);
    


  • hmmm,
    jetzt bekomme ich eine unhandled exception in atlhost.h. 😞



  • Exception? Ganz sicher? Oder doch eher ein ASSERT? Mal auf 'ignorieren' gedrückt?



  • "Unhandled exception at ...." .
    Darauf kann ich dann mit break oder continue reagieren, wobei auf continue wieder genau dasselbe folgt.



  • Komisch. Und wo passiert das? Passiert das während des CreateWindowEx-Aufrufs oder erst später? Hast du beim Methodenaufruf an die Klammern gedacht?



  • Da ein MessageBox-Aufruf direkt im Anschluss an CreateWindow unausgeführt bleibt, dürfte es während CreateWindow Probleme geben. Die genaue Stelle, an der er dann hängt, ist in atlhost.h : RedrawWindow(NULL,NULL,*irgendwelche flags*);

    Pablo


Anmelden zum Antworten