COM CoCreateInstance und so...



  • hallo,

    mich würde interessieren welche anderen möglichkeiten es noch gibt ausser CoCreateInstance an einen COM interface-pointer zu gelangen

    cheers
    m



  • Wenn du bereits ein COM-Objekt hast holst du dir den gewünschten Interface- Pointer mit QueryInterface().



  • ich dachte in com gibts nur die interfaces und QueryInterface ist nur eine methode von IUnknown?

    und an das IUnknown muss ich ja auch erst kommen (dass kann ich z.B. mit CoCreateInstance machen) die frage ist nur wie sonst noch (angeblich solls auch mit CoGetInstanceFromFile gehen)

    eigentlich gehts konkret darum _wie_ iexplore.exe sich einen pointer auf das IWebBrowser2 Interface holt.

    cheers
    m



  • Beim Erzeugen eines COM-Object gibst du ausser der Class-ID ja auch eine
    Interface-ID an. Von diesem Interface kommst du dann mit QueryInterface()
    an andere Interfaces.

    Soweit ich mich erinnere erzeugt der Internet Explorer eine Instance des
    WebBrowser-Control und wird sich dann falls nötig mit QueryInterface()
    den Pointer auf das IWebBrowser2 Interface besorgen.

    Wo liegt denn dein Problem ?



  • COM objekte werden über eine class factory erzeugt. Welche das ist gibst zu über das CLSID_ an. Über diese class factory kannst du die dann die instance des objects erzeugen welches dein interface anbietet.
    CoCreateInstance ist also nur eine Helper funktion, du kannst das auch per hand über CoGetClassObject (..IID_IClassFactory..) und CreateInstance auf dem IClassFactory mit der gewünschten IID_ machen.


Anmelden zum Antworten