⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idispatch.java

📁 使用JCom的时候
💻 JAVA
字号:
package jp.ne.so_net.ga2.no_ji.jcom;

/**
 * IDispatch僀儞僞乕僼僃乕僗傪埖偆偨傔偺僋儔僗
 *
 * @see     IUnknown
 * @see     JComException
 * @see     ReleaseManager
	@author Yoshinori Watanabe(搉曈 媊懃)
	@version 2.10, 2000/08/23
	Copyright(C) Yoshinori Watanabe 1999-2000. All Rights Reserved.
 */
public class IDispatch extends IUnknown {
    /**
		IID_IDispatch 偱偡丅
		@see       GUID
	*/
	public static GUID IID = new GUID( 0x00020400, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 );
	public static final int METHOD         = 1;
	public static final int PROPERTYGET    = 2;
	public static final int PROPERTYPUT    = 4;
	public static final int PROPERTYPUTREF = 8;

    /**
     * IDispatch傪嶌惉偟傑偡丅
     * 堷悢偱巜掕偝傟偨ProgID偺COM僆僽僕僃僋僩傪嶌惉偟傑偡丅
     *        <pre>
     *        ReleaseManager rm = new ReleaseManager();
     *        try {
     *            IDispatch excel = new IDispatch(rm ,"Excel.Application");
     *            excel.put("Visible", new Boolean(true));  // '僨僼僅儖僩偼False(昞帵偟側偄)
     *            // ...
     *            excel.invoke("Quit", null);
     *        } catch(JComException e) {
     *            e.printStackTrace();
     *        } finally {
     *            rm.release();
     *        }</pre>
     * @param     rm     	嶲徠僇僂儞僞娗棟僋儔僗
     * @param	  ProgID	僾儘僌儔儉俬俢丅Excel偺応崌"Excel.Application"偲巜掕偟傑偡丅
     * @see       #create(String)
     * @see       ReleaseManager
	 */
	public IDispatch(ReleaseManager rm, String ProgID) throws JComException {
		super(rm);
		create(ProgID);
	}

    /**
     * IDispatch傪嶌惉偟傑偡丅
     * 堷悢偱巜掕偝傟偨IDispatch億僀儞僞偺COM傪嶌惉偟傑偡丅
     * 捠忢丄暿偺COM偺儊僜僢僪偐傜曉偝傟偨IDispatch億僀儞僞偵懳偟偰丄
     * 巊梡偟傑偡丅
     * @param     rm             嶲徠僇僂儞僞娗棟僋儔僗
     * @param     pIDispatch     IDispatch僀儞僞乕僼僃乕僗偺傾僪儗僗
     * @see       #create(String)
     * @see       ReleaseManager
	 */
	public IDispatch(ReleaseManager rm, int pIDispatch) {
		super(rm, pIDispatch);
	}

    /**
     * IDispatch傪嶌惉偟傑偡丅
     * 堷悢偱巜掕偝傟偨IDispatch偲摨堦偺俠俷俵傪娗棟偟傑偡丅
     * 捠忢丄暿偺COM僆僽僕僃僋僩偺儊僜僢僪偱曉偝傟偨IDispatch偵懳偟偰丄
     * 巊梡偟傑偡丅
     * ReleaseManager偼丄堷悢disp偺帩偮摨偠傕偺偑宲彸偝傟傑偡丅
     * @see       #create(String)
	 */
	public IDispatch(IDispatch disp) {
		super(disp.rm, disp.pIUnknown);
	}

    /**
     * ProgID偐傜IDispatch僀儞僞乕僼僃乕僗傪嶌惉偟傑偡丅
     * 偡偱偵嶌惉偝傟偰偄偨応崌丄椺奜傪敪惗偝偣傑偡丅
     * @param     ProgID COM偺僾儘僌儔儉ID
     * @exception JComException <BR>
     *              "Already COM allocated" 偡偱偵COM偑妱傝摉偰傜傟偰偄傞丅<BR>
     *              "createInstance() failed HRESULT=0x%XL" 俠俷俵偺嶌惉偵幐攕偟偨丅
     */
	public synchronized void create(String ProgID) throws JComException {
		_create(ProgID);
		if(rm!=null) rm.add(this);
	}

    /**
     * 僾儘僷僥傿偺抣傪庢摼偟傑偡丅
     * 僾儘僷僥傿偺宆偲俰倎倴倎偺宆偲偺懳墳偼埲壓偺捠傝偱偡丅
     * <pre>
     *   VT_EMPTY    null
     *   VT_I4       Integer
     *   VT_R8       Double
     *   VT_BOOL     Boolean
     *   VT_BSTR     String
     *   VT_DATE     Date
     *   VT_CY       VariantCurrency
     *   VT_DISPATCH IDispatch
     *   VT_UNKNOWN  IUnknown
     * </pre>
     *	<pre>IDispatch xlBooks = (IDispatch)xlApp.get("Workbooks");</pre>
	 *  <pre>Boolean visible = xlApp.gut("Visible");</pre>
     * @param     property 僾儘僷僥傿柤
     * @return    庢摼偝傟偨抣
     * @exception JComException <BR>
     *              "IDispatch not created"   IDispatch偑嶌惉偝傟偰偄側偄丅<BR>
     *              "getProperty() failed HRESULT=0x%XL" 俠俷俵偺屇傃弌偟偵幐攕偟偨丅<BR>
     *              "cannot convert VT=0x%X" 枹懳墳偺VARIANT宆偑曉偝傟偨丅
     * @see       #get(String,Object[])
     * @see       #invoke(String,Object[])
     * @see       #put(String,Object)
     */
/*	public synchronized Object get(String property) throws JComException {
		Object ret = _get(property);
		if((rm!=null) && (ret instanceof IUnknown))
			rm.add((IUnknown)ret);
		return ret;
	}
*/
	public synchronized Object get(String property) throws JComException {
		int dispid = _getIDsOfNames(property);
		Object ret = _invoke(dispid, PROPERTYGET, null);
		if((rm!=null) && (ret instanceof IUnknown))
			rm.add((IUnknown)ret);
		return ret;
	}


    /**
     * 僾儘僷僥傿偺抣傪庢摼偟傑偡丅僾儘僷僥傿偺抣偺庢摼偵堷悢偑昁梫側応崌偵巊梡偟傑偡丅
     * 僾儘僷僥傿偺宆偲俰倎倴倎偺宆偲偺懳墳偼IDispatch.get(property)傪嶲徠偟偰偔偩偝偄丅
     * 堷悢偺搉偟曽偼IDispatch.invoke()傪嶲徠偟偰偔偩偝偄丅
     * @param     property 僾儘僷僥傿柤
     * @param     args 堷悢偺攝楍
     * @return    庢摼偝傟偨抣
     * @exception JComException <BR>
     *              "IDispatch not created"   IDispatch偑嶌惉偝傟偰偄側偄丅<BR>
     *              "Invalid argument(index=%d)" 堷悢偑晄惓丅傕偟偔偼枹懳墳偺宆偑搉偝傟偨丅<BR>
     *              "getPropertyArg() failed HRESULT=0x%XL" 俠俷俵偺屇傃弌偟偵幐攕偟偨丅<BR>
     *              "cannot convert VT=0x%X" 枹懳墳偺VARIANT宆偑曉偝傟偨丅
     * @see       #get(String)
     * @see       #invoke(String,Object[])
     * @see       #put(String,Object)
     */
/*	public synchronized Object get(String property, Object[] args) throws JComException {
		Object ret = _get(property, args);
		// 俠俷俵僆僽僕僃僋僩偑曉偝傟偨傜丄偦傟傪嶲徠僇僂儞僞娗棟僋儔僗偵捛壛偡傞丅
		if((rm!=null) && (ret instanceof IUnknown))
			rm.add((IUnknown)ret);
		return ret;
	}
*/
	public synchronized Object get(String property, Object[] args) throws JComException {
		int dispid = _getIDsOfNames(property);
		Object ret = _invoke(dispid, PROPERTYGET, args);
		// 俠俷俵僆僽僕僃僋僩偑曉偝傟偨傜丄偦傟傪嶲徠僇僂儞僞娗棟僋儔僗偵捛壛偡傞丅
		if((rm!=null) && (ret instanceof IUnknown))
			rm.add((IUnknown)ret);
		return ret;
	}


    /**
     * 僾儘僷僥傿偵抣傪愝掕偟傑偡丅
     * 僾儘僷僥傿偺宆偲俰倎倴倎偺宆偲偺懳墳偼IDispatch.get(property)傪嶲徠偟偰偔偩偝偄丅
			<pre>xlApp.put("Visible", new Boolean(true));</pre>
			<pre>xlRange.put("Value","JCom偡偛偄偧両(^o^)");</pre>
     * @param     property 僾儘僷僥傿柤
     * @param     val 愝掕偡傞抣
     * @exception JComException <BR>
     *              "IDispatch not created"   IDispatch偑嶌惉偝傟偰偄側偄丅<BR>
     *              "Invalid argument" 堷悢偑晄惓丅傕偟偔偼枹懳墳偺宆偑搉偝傟偨丅<BR>
     *              "putProperty() failed HRESULT=0x%XL" 俠俷俵偺屇傃弌偟偵幐攕偟偨丅<BR>
     * @see       #get(String)
     * @see       #get(String,Object[])
     * @see       #invoke(String,Object[])
     */
/*	public synchronized void   put(String property, Object val) throws JComException {
		_put(property, val);
	}
*/
	public synchronized void   put(String property, Object val) throws JComException {
		int dispid = _getIDsOfNames(property);
		Object[] args = new Object[1];
		args[0] = val;
		_invoke(dispid, PROPERTYPUT, args);
	}



    /**
     * 儊僜僢僪傪屇傃弌偟傑偡丅
     * 僾儘僷僥傿偺宆偲俰倎倴倎偺宆偲偺懳墳偼JCom.get(property)傪嶲徠偟偰偔偩偝偄丅
     * <pre>
			Object[] arglist = new Object[3];
			arglist[0] = new Boolean(false);
			arglist[1] = null;
			arglist[2] = new Boolean(false);
			xlBook.method("Close", arglist);
     * </pre>
     * @param     method 儊僜僢僪柤
     * @param     args   堷悢
     * @exception JComException <BR>
     *              "IDispatch not created"   IDispatch偑嶌惉偝傟偰偄側偄丅<BR>
     *              "Invalid argument(index=%d)" 堷悢偑晄惓丅傕偟偔偼枹懳墳偺宆偑搉偝傟偨丅<BR>
     *              "invokeMethod() failed HRESULT=0x%XL" 俠俷俵偺屇傃弌偟偵幐攕偟偨丅<BR>
     *              "cannot convert VT=0x%X" 枹懳墳偺VARIANT宆偑曉偝傟偨丅
     * @see       #get(String)
     * @see       #get(String,Object[])
     * @see       #put(String,Object)
	 */
/*
	public synchronized Object method(String method, Object[] args) throws JComException {
		Object ret = _method(method, args);
		if((rm!=null) && (ret instanceof IUnknown))
			rm.add((IUnknown)ret);
		return ret;
	}
*/
	public synchronized Object method(String method, Object[] args) throws JComException {
		int dispid = _getIDsOfNames(method);
		Object ret = _invoke(dispid, METHOD, args);
		if((rm!=null) && (ret instanceof IUnknown))
			rm.add((IUnknown)ret);
		return ret;
	}

    /**
		method()傪嶲徠偟偰偔偩偝偄丅
		@see	#method(String,Object[])
		@deprecated	method(String,Object[])偵抲偒姺傢傝傑偟偨丅
	 */
	public synchronized Object invoke(String method, Object[] args) throws JComException {
		return method(method, args);
	}

    /**
		儊僜僢僪丄僾儘僷僥傿偺愝掕丒庢摼傪峴偄傑偡丅
		僾儘僷僥傿偺宆偲俰倎倴倎偺宆偲偺懳墳偼JCom.get(property)傪嶲徠偟偰偔偩偝偄丅
		<pre>
			Object[] arglist = new Object[3];
			arglist[0] = new Boolean(false);
			arglist[1] = null;
			arglist[2] = new Boolean(false);
			xlBook.invoke("Close", IDispatch.METHOD, arglist);
		</pre>
		@param     method 儊僜僢僪柤
		@param     args   堷悢
		@exception JComException <BR>
		             "IDispatch not created"   IDispatch偑嶌惉偝傟偰偄側偄丅<BR>
		             "Invalid argument(index=%d)" 堷悢偑晄惓丅傕偟偔偼枹懳墳偺宆偑搉偝傟偨丅<BR>
		             "invokeMethod() failed HRESULT=0x%XL" 俠俷俵偺屇傃弌偟偵幐攕偟偨丅<BR>
		             "cannot convert VT=0x%X" 枹懳墳偺VARIANT宆偑曉偝傟偨丅
		@see       #get(String)
		@see       #get(String,Object[])
		@see       #put(String,Object)
		@see       #method(String,Object[])
	*/
	public synchronized Object invoke(String name, int wFlags, Object[] pDispParams) throws JComException {
		int dispid = _getIDsOfNames(name);
		return _invoke(dispid, wFlags, pDispParams);
	}

    /**
    	ITypeInfo傪庢摼偟傑偡丅
	*/
	public synchronized ITypeInfo getTypeInfo() throws JComException {
		int pITypeInfo = _getTypeInfo();
		return new ITypeInfo(rm, pITypeInfo);
	}

	// release()偼super偺偱俷俲丏

	// JNI
	private native void   _create(String ProgID) throws JComException;
	private native Object _get(String property) throws JComException;
	private native Object _get(String property, Object[] args) throws JComException;
	private native void   _put(String property, Object val) throws JComException;
	private native Object _method(String method, Object[] args) throws JComException;
	private native int    _getTypeInfo() throws JComException;
	private native Object _invoke(int dispIdMember, int wFlags, Object[] pDispParams) throws JComException;
	private native int    _getIDsOfNames(String name) throws JComException;

	// jcom.dll傪撉傒崬傒傑偡丅
    static {
        System.loadLibrary("jcom");
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -