Problem mit ATL



  • Du bist Dir sicher, daß die COM-Klasse registriert ist?



  • Hi,
    😕 ich muss zugeben, dass ich mich mit ATL und COM bisher noch nicht auseinandergesetzt habe, daher weiss ich nicht, was genau Du mit COM-Klasse meinst. Ich muss dringend entweder den IE oder Shockwave in meiner Anwendung zum laufen bringen, deshalb habe ich leider nicht die Zeit, mich einzuarbeiten, es muss nur laufen.
    Folgendes Phänomen ist nun aufgetreten: ich habe eine MessageBox, die direkt vor CreateWindow stand, auskommentiert und seitdem funktioniert es (jetzt auch ohne Auskommentierung), allerdings nur mit der Browser-CLSID. Bei Shockwave und Pdf macht er Unfug.

    Pablo



  • dein Fenster oder Dialog das ActiveX Komponente hostet, muss von CAxWindow bzw. CAxDialogImpl abgeleitet sein. Das Objekt muss wiederrum ein COM-Objekt sein. Erst dann kannst du ein IE Fenster erstellen. In der WinMain Funktion musst du noch AtlAxWinInit aufrufen. Nachdem du das alles getan hast, ruftst du CAxWindow::Create und dann CAxWindow::CreateControl bzw. CAxWindow::CreateControlEx mit der richtigen CLSID.



  • Shlo schrieb:

    dein Fenster oder Dialog das ActiveX Komponente hostet, muss von CAxWindow bzw. CAxDialogImpl abgeleitet sein.

    Wieso?

    @Pablo
    Anders gefragt: Bist Du sicher, daß Du den richtigen CLSID angegeben hast?

    Ich weiß eben ehrlich gesagt auch nicht, wie Dir das näher bringen kann, da Du von COM noch gar nichts weißt. So komplett ohne Hintergrund wirst Du wohl früher oder später sowieso ans Ende gelangen.



  • -King- schrieb:

    Shlo schrieb:

    dein Fenster oder Dialog das ActiveX Komponente hostet, muss von CAxWindow bzw. CAxDialogImpl abgeleitet sein.

    Wieso?

    weil auf die Weise ist ATL aufgebaut.



  • Shlo schrieb:

    weil auf die Weise ist ATL aufgebaut.

    Na und? Deswegen muß ich doch nichts von CAxWindow oder CAxDialogImpl ableiten. Ich kann doch trotzdem einfach CreateWindow/ Ex verwenden.



  • @king
    ich habe die CLSID angegeben, mit der man ein Shockwave-file in den Browser lädt, das müsste also stimmen.

    Pablo
    PS. herzlichen Dank für Deine hilfsbereitschaft 👍



  • -King- schrieb:

    Shlo schrieb:

    weil auf die Weise ist ATL aufgebaut.

    Na und? Deswegen muß ich doch nichts von CAxWindow oder CAxDialogImpl ableiten. Ich kann doch trotzdem einfach CreateWindow/ Ex verwenden.

    von mir aus kannst verwenden was auch immer du willst, da frage ich mich warum du ATL dafür brauchst...



  • Shlo schrieb:

    von mir aus kannst verwenden was auch immer du willst,

    Ach, wie schön. Weiter oben hiess es noch, daß ich ableiten muß.

    Shlo schrieb:

    da frage ich mich warum du ATL dafür brauchst...

    Wegen der Fensterprozedur zur Fensterklasse CAxWindow::GetWndClassName() vielleicht?

    BTW: Wenn Du schon ableitest, kannst Du Dir den Aufruf von AtlAxWinInit sparen. Das muß in dem von Dir beschriebenen Szenario nicht sein. Das passiert automatisch AtlAxCreateControlEx, bzw. im Konstruktor von CAxWindowT (ATL7). Das war also auch Unsinn.

    @Pablo
    Ich kann Dir nicht sagen, warum das bei Dir nicht funktioniert. Ich kann mir nur vorstellen, daß der CLSID nicht registriert ist, und 'müsste also' ist immer so eine Sache. Schau Dir mal mit OLEView unter 'Controls' an, was Sache ist.

    BTW: Wenn es mit dem Browser funktioniert, läufst Du dann gar nicht in eine Assertion?



  • -King- schrieb:

    Ach, wie schön. Weiter oben hiess es noch, daß ich ableiten muß.

    ich glaube ich spreche mit einer Wand...

    -King- schrieb:

    Wegen der Fensterprozedur zur Fensterklasse CAxWindow::GetWndClassName() vielleicht?

    LOL? und da nimmst du lieber CreateWindow/Ex?


Anmelden zum Antworten