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
-
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