Problem mit dem Bilden einer Instanze einer ActiveX zur Laufzeit und mit dem anschliessenden Aufrufen einer Methode dies



  • Hallo!

    CLSCTX_INPROC_SERVER ist aber als 1 definiert

    CLSCTX_INPROC_SERVER is defined as 1

    and

    CONFIG() braucht keine Parameter , 100% sicher

    CONFIG() need no Parameter ,i am sure to 100%

    Thanks



  • Ausserdem bekomme ich ja die richtige DISPID, ich weiss das, da mir die IDL der Componente vorliegt.

    I know the right dispid from CONFIG() and it is the right DISPID which i get

    Thanks



  • masanne schrieb:

    CLSCTX_INPROC_SERVER ist aber als 1 definiert

    Mag ja sein. NUMBER_OF_GODS_IN_CHRISTIANITY ist sicher auch als 1 definiert, trotzdem würde ich es hier nicht einsetzen, weil es den Sinn nicht trifft.

    Steht nach dem Aufruf etwas in varResult oder ExceptInfo?

    Könntest du dich mal auf eine Sprache festlegen?



  • Sprache: Dann deutsch bitte, ich habe nur den Text auch auf einer engl. Seite gepostet und erst nur kopiert.

    sorry



  • varresult = {VT_EMPTY} --> also nichts
    CONFIG() hat aber eigentlich auch keinen Rückgabewert , es soll sich nur eine Dialog Box öffnen

    ExceptInfo = {wCode=52428 wReserved=52428 bstrSource=0xcccccccc <Bad Ptr> ...}
    das sagt mir aber nichts, ich denke das es leer ist, da vor dem Aufruf von invoke die gleichen Informationen für ExceptInfo da stehen ( im Debug-Modus)

    masanne



  • Keine Plan mehr, was noch falsch sein könnte?



  • Ich vermute, du erzeugst zwei Objekte, und rufst Invoke mit dem falschen auf. Vielleicht kann jemand dazu etwas sagen, der sich besser mit der Verwendung von ActiveX-Controls ohne Wrapper auskennt.



  • wie kommst du darauf, dass ich zwei Instanzen erzeuge? wegen cocreateinstance und createcontrol?

    Trotzdem schonmal Danke das du dir Zeit genommen hast

    masanne



  • masanne schrieb:

    wie kommst du darauf, dass ich zwei Instanzen erzeuge? wegen cocreateinstance und createcontrol?

    Genau. Ich vermute, letzteres erzeugt auch eine Instanz des Steuerelements. Und vermutlich kann nur die richig auf CONFIG reagieren.



  • MFK schrieb:

    masanne schrieb:

    wie kommst du darauf, dass ich zwei Instanzen erzeuge? wegen cocreateinstance und createcontrol?

    Genau. Ich vermute, letzteres erzeugt auch eine Instanz des Steuerelements. Und vermutlich kann nur die richig auf CONFIG reagieren.

    Das war der entscheidende Satz. Danke Schön.

    ...
    CoInitialize(NULL);
    
    CWnd m_ControlWrapper;
    RECT rct = {0,0,5,50};
    
    BOOL bStat=FALSE;
    bStat= m_ControlWrapper.CreateControl(clsid, "Spectrometer", WS_CHILD, rct, this, 1212, NULL, FALSE, NULL);
    
    if (bStat == FALSE)
    {
    	MessageBox ("Could not place control");
    	return;
    }
    
    // Use the IUnknown of the control.
    LPUNKNOWN pUnk = m_ControlWrapper.GetControlUnknown();
    
    // From there get the IDispatch interface of control.
    LPDISPATCH pInterface = NULL;
    pUnk->QueryInterface(IID_IDispatch, (LPVOID*)&pInterface);
    
    CString CstrMethod = "CONFIG"; // andere Methode z.B. "SCAN"
    BSTR BstrMethod = CstrMethod.AllocSysString();
    
    DISPID dispid; 
    
    // get the id of the method									
    HRESULT hRet = pInterface->GetIDsOfNames(IID_NULL, &BstrMethod, CLSCTX_INPROC_SERVER , LOCALE_SYSTEM_DEFAULT, &dispid); 
    
    m_ControlWrapper.InvokeHelper(dispid, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);//InvokeHelper(0xc, DISPATCH_METHOD , VT_EMPTY, NULL, NULL);
    
    CoUninitialize(); 
    ...
    

    Nur, dass ich das CONFIG-Window nicht angezeigt bekomm. Aber wenn ich es mit einer anderen Methode versuche, klappt es.


Anmelden zum Antworten