All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jinterop.dcom.impls.automation.IJIDispatch Maven / Gradle / Ivy

There is a newer version: 3.5.1
Show newest version
/** j-Interop (Pure Java implementation of DCOM protocol)
 * Copyright (C) 2006  Vikram Roopchand
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3.0 of the License, or (at your option) any later version.
 *
 * Though a sincere effort has been made to deliver a professional,
 * quality product,the library itself is distributed WITHOUT ANY WARRANTY;
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 */
package org.jinterop.dcom.impls.automation;

import org.jinterop.dcom.common.JIException;
import org.jinterop.dcom.core.IJIComObject;
import org.jinterop.dcom.core.JIVariant;

/**
 * < p>
 * Represents the Windows COM IDispatch Interface.
 *
 * 

* Sample Usage :- *
* * * //Assume comServer is the reference to JIComServer, obtained earlier...
* IJIComObject comObject = comServer.createInstance();
* // This call will result into a QueryInterface for the IDispatch
* IJIDispatch dispatch = * (IJIDispatch)JIObjectFactory.narrowObject(comObject.queryInterface(IJIDispatch.IID)); *
*
*

* Another example :- *
* * int dispId = dispatch.getIDsOfNames("Workbooks");
* JIVariant outVal = dispatch.get(dispId);
* IJIDispatch dispatchOfWorkBooks * =(IJIDispatch)JIObjectFactory.narrowObject(outVal.getObjectAsComObject());
* JIVariant[] outVal2 = dispatchOfWorkBooks.callMethodA("Add",new * Object[]{JIVariant.OPTIONAL_PARAM()});
* dispatchOfWorkBook * =(IJIDispatch)JIObjectFactory.narrowObject(outVal2[0].getObjectAsComObject());
* outVal = dispatchOfWorkBook.get("Worksheets");
* dispatchOfWorkSheets = * (IJIDispatch)JIObjectFactory.narrowObject(outVal.getObjectAsComObject());
*
*

* * Please note that all [in] parameters are converted to * {@link JIVariant} before being sent to the COM server through * the IJIDispatch interface. If any [in] parameter is * already a JIVariant , it is left as it is. *

* for example:-
* * //From MSADO example.
* dispatch = * (IJIDispatch)JIObjectFactory.narrowObject(comObject.queryInterface(IJIDispatch.IID));
* dispatch.callMethod("Open",new Object[]{new JIString("driver=Microsoft Access * Driver (*.mdb);dbq=C:\\temp\\products.mdb"),
* JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM,new Integer(-1)});
* JIVariant variant[] = dispatch.callMethodA("Execute",new Object[]{new * JIString("SELECT * FROM Products"),new Integer(-1)});
* if (variant[0].isNull())
* {
* System.out.println("Recordset is empty.");
* }
* else
* {
* //Do something...
* }
*
*

* * Where ever the corresponding COM interface API requires an * [optional] parameter, the developer can use * JIVariant.OPTIONAL_PARAM() , like in the example above. *

* * @since 1.0 */ public interface IJIDispatch extends IJIComObject { /** * Flag for selecting a method. */ public final int DISPATCH_METHOD = 0xFFFFFFF1; /** * Flag for selecting a Property propget. */ public final int DISPATCH_PROPERTYGET = 0xFFFFFFF2; //(0x2 ); /** * Flag for selecting a Property propput. */ public final int DISPATCH_PROPERTYPUT = 0xFFFFFFF4; //& (0x4 ); /** * COM DISPID for property "put" or "putRef". */ public final int DISPATCH_DISPID_PUTPUTREF = 0xFFFFFFFD; //(0x4 | 0x8 | DISPATCH_METHOD); /** * Flag for selecting a Property propputref. */ public final int DISPATCH_PROPERTYPUTREF = 0xFFFFFFF8; //0x8 /** * IID representing the COM IDispatch. */ public final String IID = "00020400-0000-0000-c000-000000000046"; /** * Definition from MSDN: * Determines whether there is type information available for the dual * interface. *
* * @return 1 if the object provides type information, otherwise 0. * @throws JIException */ public int getTypeInfoCount() throws JIException; /** * Maps a method name to its corresponding DISPID.The result of * this call is cached for further usage and no network call is performed * again for the same method name.
* * @param apiName Method name. * @return DISPID of the method. * @throws JIException * @throws IllegalArgumentException if the apiName is * null or empty. */ public int getIDsOfNames(String apiName) throws JIException; /** * Maps a single method name and an optional set of it's argument names to a * corresponding set of DISPIDs. The result of this call is * cached for further usage and no network call is performed again for the * same method[argument] set. * * @param apiName String[] with first index depicting method name and the * rest depicting parameters. * @return int[] DISPIDs in the same order as the * method[argument] set. * @throws JIException * @throws IllegalArgumentException if the apiName is * null or empty. */ public int[] getIDsOfNames(String[] apiName) throws JIException; /** * Returns an implementation of COM ITypeInfo interface based * on the typeInfo. *
* * @param typeInfo the type information to return. Pass 0 to retrieve type * information for the IDispatch implementation. * @return * @throws JIException */ public IJITypeInfo getTypeInfo(int typeInfo) throws JIException; /** * Performs a propput for the method identified by the * dispId.
* * @param dispId DISPID of the method to invoke. * @param inparam parameter for that method. * @throws JIException */ public void put(int dispId, JIVariant inparam) throws JIException; /** * Performs a propput for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #put(int, JIVariant)}. * * @param name name of the method to invoke. * @param inparam parameter for that method. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ public void put(String name, JIVariant inparam) throws JIException; /** * Performs a propputref for the method identified by the * dispId.
* * @param dispId DISPID of the method to invoke. * @param inparam parameter for that method. * @throws JIException */ public void putRef(int dispId, JIVariant inparam) throws JIException; /** * Performs a propput for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #putRef(int, JIVariant)}. * * @param name name of the method to invoke. * @param inparam parameter for that method. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ public void putRef(String name, JIVariant inparam) throws JIException; /** * Performs a propget for the method identified by the * dispId.
* * @param dispId DISPID of the method to invoke. * @return JIVariant result of the call * @throws JIException */ public JIVariant get(int dispId) throws JIException; /** * Performs a propget for the method identified by the * dispId parameter. inparams defines the * parameters for the get operation.
* * @param dispId DISPID of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @return array of JIVariants * @throws JIException */ public JIVariant[] get(int dispId, Object[] inparams) throws JIException; /** * Performs a propget for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #get(int, Object[])}. * * @param name name of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @return array of JIVariants * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ public JIVariant[] get(String name, Object[] inparams) throws JIException; /** * Performs a propget for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #get(int)} * * @param name name of the method to invoke. * @return JIVariant result of the call. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ public JIVariant get(String name) throws JIException; /** * Performs a method call for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #callMethod(int)}. *
* * @param name name of the method to invoke. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ public void callMethod(String name) throws JIException; /** * Performs a method call for the method identified by the * dispId parameter.
* * @param dispId DISPID of the method to invoke. * @throws JIException */ public void callMethod(int dispId) throws JIException; /** * Performs a method call for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #callMethodA(int)}. *
* * @param name name of the method to invoke. * @return JIVariant result. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ public JIVariant callMethodA(String name) throws JIException; /** * Performs a method call for the method identified by the * dispId parameter.
* * @param dispId DISPID of the method to invoke. * @return JIVariant result. * @throws JIException */ public JIVariant callMethodA(int dispId) throws JIException; /** * Performs a method call for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #callMethod(int, Object[])}. For the inparams array, * sequential DISPIDs (zero based index) will be used. For * inparam[0] , DISPID will be 0, for * inparam[1] it will be 1 and so on.
* * @param name name of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ //sequential dispIds for params are used 0,1,2,3... public void callMethod(String name, Object[] inparams) throws JIException; //sequential dispIds for params are used 0,1,2,3... /** * Performs a method call for the method identified by the * dispId parameter. For the inparams array, * sequential DISPIDs (zero based index) will be used. For * inparam[0] , DISPID will be 0, for * inparam[1] it will be 1 and so on.
* * @param dispId DISPID of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @throws JIException */ public void callMethod(int dispId, Object[] inparams) throws JIException; /** * Performs a method call for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #callMethodA(int, Object[])}. For the inparams array, * sequential DISPIDs (zero based index) will be used. For * inparam[0] , DISPID will be 0, for * inparam[1] it will be 1 and so on.
* * @param name name of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @return JIVariant[] result. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ //sequential dispIds for params are used 0,1,2,3... public JIVariant[] callMethodA(String name, Object[] inparams) throws JIException; /** * Performs a method call for the method identified by the * dispId parameter. For the inparams array, * sequential DISPIDs (zero based index) will be used. For * inparam[0] , DISPID will be 0, for * inparam[1] it will be 1 and so on. * * @param dispId DISPID of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @return JIVariant[] result. * @throws JIException */ //sequential dispIds for params are used 0,1,2,3... public JIVariant[] callMethodA(int dispId, Object[] inparams) throws JIException; /** * Performs a method call for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #callMethod(int, Object[], int[])}. For the inparams * array, the corresponding DISPIDs are present in the * dispIds array. The size of both arrays should match. *
* * @param name name of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @param dispIds array of DISPIDs , matching by index to those * in inparams array. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ //inparams.length == dispIds.length. public void callMethod(String name, Object[] inparams, int[] dispIds) throws JIException; /** * Performs a method call for the method identified by the * dispId parameter. For the inparams array, the * corresponding DISPIDs are present in the * dispIds array. The size of both arrays should match. *
* * @param dispId DISPID of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @param dispIds array of DISPIDs , matching by index to those * in inparams array. * @throws JIException */ //inparams.length == dispIds.length. public void callMethod(int dispId, Object[] inparams, int[] dispIds) throws JIException; /** * Performs a method call for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #callMethodA(int, Object[], int[])}.For the inparams * array, the corresponding DISPIDs are present in the * dispId array. The size of both arrays should match. *
* * @param name name of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @param dispIds array of DISPIDs , matching by index to those * in inparams array. * @return JIVariant[] result. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ //inparams.length == dispIds.length. public JIVariant[] callMethodA(String name, Object[] inparams, int[] dispIds) throws JIException; /** * Performs a method call for the method identified by the * dispId parameter. For the inparams array, the * corresponding DISPIDs are present in the * dispIds array. The size of both arrays should match. * * @param dispId DISPID of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @param dispIds array of DISPIDs , matching by index to those * in inparams array. * @return JIVariant[] result. * @throws JIException */ //inparams.length == dispIds.length. public JIVariant[] callMethodA(int dispId, Object[] inparams, int[] dispIds) throws JIException; /** * Performs a method call for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String[])} by forming * name + paramNames [], and then delegates the call to * {@link #callMethod(int, Object[], int[])}. For the inparams * array, the corresponding parameter names are present in the * paramNames array. The size of both arrays should match. * * @param name name of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @param paramNames Array of parameter names, matching by index to those in * inparams array. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ // inparams.length == paramNames.length. public void callMethod(String name, Object[] inparams, String[] paramNames) throws JIException; /** * Performs a method call for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String[])} by forming * name + paramNames [], and then delegates the call to * {@link #callMethodA(int, Object[], int[])}. For the inparams * array, the corresponding parameter names are present in the * paramNames array. The size of both arrays should match. * * @param name name of the method to invoke. * @param inparams members of this array are implicitly converted to * JIVariants before performing the actual call to the COM * server, via the IJIDispatch interface. * @param paramNames Array of parameter names, matching by index to those in * inparams array. * @return JIVariant result. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ //inparams.length == paramNames.length. public JIVariant[] callMethodA(String name, Object[] inparams, String[] paramNames) throws JIException; /** * Performs a propput for the method identified by the * dispId
* * @param dispId DISPID of the method to invoke. * @param params parameters for that method. * @throws JIException */ public void put(int dispId, Object[] params) throws JIException; /** * Performs a propput for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #put(int, Object[])}. * * @param name name of the method to invoke. * @param params parameters for that method. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ public void put(String name, Object[] params) throws JIException; /** * Performs a propputref for the method identified by the * dispId.
* * @param dispId DISPID of the method to invoke. * @param params parameters for that method. * @throws JIException */ public void putRef(int dispId, Object[] params) throws JIException; /** * Performs a propput for the method identified by the * name parameter. Internally it will first do a * {@link #getIDsOfNames(String)} and then delegates the call to * {@link #putRef(int, Object[])}. * * @param name name of the method to invoke. * @param params parameters for that method. * @throws JIException * @throws IllegalArgumentException if the name is * null or empty. */ public void putRef(String name, Object[] params) throws JIException; /** * Returns the COM EXCEPINFO structure wrapped as a data object * for the * last operation. Note this will only be valid if a * {@link JIException} has been raised in the last call. * * @return */ public JIExcepInfo getLastExcepInfo(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy