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

org.eclipse.swt.ole.win32.AutomationHandler Maven / Gradle / Ivy

//@(#) $Id: AutomationHandler.java 1156 2004-03-11 10:06:26Z S1462 $
package org.eclipse.swt.ole.win32;

import org.eclipse.swt.internal.ole.win32.COM;
import org.eclipse.swt.internal.ole.win32.GUID;
import org.eclipse.swt.internal.ole.win32.IDispatch;
import org.eclipse.swt.internal.ole.win32.IUnknown;


/**
 * AutomationHandler provides a mechanism for accessing functionality that is
 * specific to a COM Object .
 *
 * 

The COM Object must support the IDispatch interface in order to provide * OleAutomation support. * *

Here is a sample IDL fragment: * *

 *  interface IBerechtigungInteractive : IDispatch
 *	{
 *    [id(DISPID_VALUE), propget, helpstring("property UserName")]
 *       HRESULT UserName([out, retval] BSTR *pVal);
 *
 *    [id(1), helpstring("method Create")]
 *       HRESULT Create([in] BSTR Profile, [in, defaultvalue(0)] long Wnd, [in, defaultvalue(0)] int Flags);
 *    .....
 *	};
 * 
* *

An example of how to interact with AutomationHandler is shown below: * *

 *
 *  AutomationHandler alfaBer = new AutomationHandler("SD_BER.BerechtigungInteractive");
 *
 * // Look up the ID of the UserName property
 *   int[] rgdispid = alfaBer.getAutomationObject().getIDsOfNames(new String[]{"UserName"});
 *   int dispIdMember = rgdispid[0];
 *  // Get the  value of the UserName parameter:
 *   Variant pVarResult = alfaBer.getAutomationObject().getProperty(dispIdMember);
 *
 *  if (pVarResult != null && pVarResult.getType() == OLE.VT_BSTR) {
 *    System.out.println("UserName is " + pVarResult.getString());
 *	}
 *
 *  // Invoke the Create method
 *  // Look up the IDs of the Create method and its parameter
 *   int[] rgdispid = alfaBer.getAutomationObject().getIDsOfNames(new String[]{"Create", "Profile"});
 *   int dispIdMember = rgdispid[0];
 *
 *   // Convert arguments to Variant objects
 *       Variant[] rgvarg = new Variant[1];
 *       rgvarg[0] = new Variant("KRE");
 *       int[] rgdispidNamedArgs = new int[1];
 *       rgdispidNamedArgs[0] = rgdispid[1]; // identifier of argument
 * // Call the method
 *      Variant pVarResult = alfaBer.getAutomationObject().invoke(dispIdMember, rgvarg, rgdispidNamedArgs);
 *
 *	// Check the return value
 *  if (pVarResult == null ){
 *    System.out.println("Failed to call method ");
 *	}
 * // Dispose the automation object
 *  alfaBer.dispose();
 *
 * 
* * */ public class AutomationHandler { //the OleAutomation object for this handler private OleAutomation oleAutomation; // Server relevant context private final int CLSCTX_SERVER= (COM.CLSCTX_INPROC_SERVER | COM.CLSCTX_LOCAL_SERVER | COM.CLSCTX_REMOTE_SERVER ); /** * Creates an OleAutomation object with a given ProgID. * * @param progID the Prog-ID for the COM Object whose functionality * you need to access * * @exception SWTError
    *
  • ERROR_CANNOT_CREATE_OBJECT *
*/ public AutomationHandler(String progID){ GUID appClsid = getClassID(progID); int[] ppv = new int[1]; int result = COM.CoCreateInstance(appClsid, 0, CLSCTX_SERVER , COM.IIDIUnknown, ppv); if (result != COM.S_OK){ OLE.error(OLE.ERROR_CANNOT_CREATE_OBJECT, result); } IUnknown objIUnknown = new IUnknown(ppv[0]); int[] ppvObject = new int[1]; result = objIUnknown.QueryInterface(COM.IIDIDispatch, ppvObject); objIUnknown.Release(); // no more needed if (result != COM.S_OK){ OLE.error(OLE.ERROR_INTERFACE_NOT_FOUND, result); } IDispatch objIDispatch = new IDispatch(ppvObject[0]); oleAutomation = new OleAutomation(objIDispatch); objIDispatch.Release(); // no more needed } /** * @param objIDispatch */ public AutomationHandler(IDispatch objIDispatch){ oleAutomation = new OleAutomation(objIDispatch); } /** * retrieves the CLSID of a COM object with a given ProgID. * * @param clientName the Prog-ID for the COM Object * * @exception SWTError
    *
  • ERROR_INVALID_CLASSID *
*/ private GUID getClassID(String clientName) { // create a GUID struct to hold the result GUID guid = new GUID(); // create a null terminated array of char char[] buffer = null; if (clientName != null) { int count = clientName.length(); buffer = new char[count + 1]; clientName.getChars(0, count, buffer, 0); } if (COM.CLSIDFromProgID(buffer, guid) != COM.S_OK){ int result = COM.CLSIDFromString(buffer, guid); if (result != COM.S_OK) OLE.error(OLE.ERROR_INVALID_CLASSID, result); } return guid; } /** * Disposes the Automation object. * This method releases the IDispatch interface on the Automation object. */ public void dispose() { if (oleAutomation != null) oleAutomation.dispose(); oleAutomation = null; } /** * returns the Automation object. */ public OleAutomation getAutomationObject(){ return oleAutomation; } /** * returns the adress of Automation object. */ public int getAddress(){ return oleAutomation.getAddress(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy