📄 idispatch.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 + -