COM Invoke und IDispatch



  • Halo zusammen,
    ich bin relativ neu was COM betrifft und hätte diesbezüglich eine Frage:
    ich will eine Methode aufrufen, welches den folgenden Prototypen hat:

    CreateSession(BSTR, BSTR, BSTR, [out] IDispatch**);
    

    Den Server kann ich instanziieren und auch die Methode kann ich per GetIDsOfNames finden.
    Mein DISPPARAMS bekommt VARIANT-Array mit 4 VARIANTs zugewiesen.
    Die ersten drei sind klar (BSTR) nur wie bilde ich IDispatch** ab?

    Mit

    vt = VT_DISPATCH | VT_BYREF;
    

    habe ich nur ein "IDispatch *" oder?
    Jedenfalls ist der HResult leider nicht S_OK 😉

    Danke für eure Tipps!

    Gruß,

    Mark


  • Mod

    Ein IDispatch* ist ein normler Interfacezeiger. Um einen IDispatch* zurückzugeben benötigt man einen Zeiger auf IDispatch*, also einen IDispatch**!

    Damit hast Du recht, dass dies ein VT_DISPATCH | VT_BYREF ist.

    Nur ist dies ein OUT Parameter! Du kannst ihn als Empty übergeben. Er müsste gefüllt werden vom aufgerufenen Interface!

    Die ist hoffentlich klar was in, in/out, out bedeuten!



  • Danke, habs hingekriegt. Der Fehler lag natürlich wo anders 🙄
    Und ja, [out] war mir bekannt. COM ist für mich Neuland, nicht C++/C 😉


Anmelden zum Antworten