IDispatch::Invoke()- wie komme ich an Rückgabewerte der OLE Funktionen?



  • Zunächst: Ich nutze eine Wrapper Klasse, welche aber sehr ähnlich ist, wie das eigentliche IDispatch::Invoke().

    Ich habe einen Automatisierungs cLient, der so weit auch ganz prima funktioniert. Die Kommunikation mit dem OLE Server läuft wie geschmiert, ich kann alle Möglichen Methoden aufrufen usf.

    Sobald ich aber eine Methode aufrufen will, die mir etwas zurückgibt und nihct bloss Fernsteuert (z.B. eine Suchmethode, welche mir die Trefferanzahl zurückgeben soll), stehe ich vor einem Problem.

    Beispiel:

    LPVARIANT pRet;
    
    // weggelassen wg. Uebersicht
    
             hr = Invoke(pDisp,
    		   DISPATCH_METHOD,
    		   pRet,   // LPVARIANT Hier sollen die Rückgabewerte rein- nur wie?
    		   NULL,
    		   NULL,
    		   OLESTR("DoFullTextSearch"), // Diese Methode soll aufgerufen werden
    		   TEXT("si"),          // Makro, welches Angibt das der Methode ein String und ein int uebergeben werden
    		   (LPOLESTR)OLESTR("router"), // Argument fuer den Methodenaufruf
    		   1); // anderes Argument fuer Methodenaufruf
    

    Die Probleme sind nun:

    1. Wenn ich pRet = NULL setze, bzw. NULL an dessen Stelle im Invoke Aufruf steze, bedeutet dies, dass ich keinen Rückgabewert brauche. Nur womit soll ich die Variable denn definieren?

    2. Wenn ich pRet keinen Wert zuweise beschwert sich der Compiler- klar.

    3. Als Referenz will es das Invoke nicht akzeptieren.

    pRet soll eben ein Pointer auf deijenige Stelle sein, wo das Resultat der OLe FUnktion (hier: CallFullTextSearch()) hingeschrieben wird. Irgendeine Idee, wie ich das verwenden soll?



  • VARIANT vRet;
    VariantInit(&vRet);
    

    und übergeben solltest Du "&vRet".
    Beachte auch bitte den folgenden Blog-Entry:
    http://blog.kalmbachnet.de/?postid=63


Anmelden zum Antworten