📄 iunknown.java
字号:
package jp.ne.so_net.ga2.no_ji.jcom;
import java.lang.reflect.*;
/**
* IUnknown僀儞僞乕僼僃乕僗傪埖偆偨傔偺僋儔僗
*
* @see IDispatch
* @see JComException
* @see ReleaseManager
@author Yoshinori Watanabe(搉曈 媊懃)
@version 2.00, 2000/06/25
Copyright(C) Yoshinori Watanabe 1999-2000. All Rights Reserved.
*/
public class IUnknown {
/**
IID_IUnknown 偱偡丅
@see GUID
*/
public static GUID IID = new GUID( 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 );
/**
IUnknown僀儞僞乕僼僃乕僗偺億僀儞僞傪曐帩偟傑偡丅
曄峏偟側偄偱偔偩偝偄丅
IUnknown interface pointer.
Don't change!
*/
protected int pIUnknown = 0; // IUnknown僀儞僞乕僼僃乕僗傪帩偮僆僽僕僃僋僩偺億僀儞僞
/**
嶲徠僇僂儞僞娗棟僋儔僗
Reference counter management class.
*/
protected ReleaseManager rm = null;
/**
* 嬻偺IUnknown傪嶌惉偟傑偡丅
* COM偼妱傝摉偰傜傟偰偄側偄偺偱拲堄
* @param rm 嶲徠僇僂儞僞娗棟僋儔僗
* @see ReleaseManager
*/
public IUnknown(ReleaseManager rm) {
this.rm = rm;
this.pIUnknown = 0;
}
/**
* IUnknown傪嶌惉偟傑偡丅
* 堷悢偱巜掕偝傟偨IUnknown億僀儞僞偺COM傪嶌惉偟傑偡丅
* 捠忢丄暿偺COM偺儊僜僢僪偐傜曉偝傟偨IUnknown億僀儞僞偵懳偟偰丄
* 巊梡偟傑偡丅
* @param rm 嶲徠僇僂儞僞娗棟僋儔僗
* @param IUnknown IUnknown僀儞僞乕僼僃乕僗偺傾僪儗僗
* @see ReleaseManager
*/
public IUnknown(ReleaseManager rm, int pIUnknown) {
this.rm = rm;
this.pIUnknown = pIUnknown;
}
/**
* QueryInterface傪幚峴偟丄巜掕偟偨僀儞僞乕僼僃乕僗傪庢摼偟傑偡丅
* IID 偲 Java懁偺僋儔僗傪巜掕偟偰壓偝偄丅
* <pre>
* IUnknown iUnknown = (IUnknown)worksheets.get("_NewEnum");
* IEnumVARIANT a = (IEnumVARIANT)iUnknown.queryInterface(
* IEnumVARIANT.class,
* IEnumVARIANT.IID);
* </pre>
2000.11.27 僒億乕僩偟偰偄側偄僀儞僞乕僼僃乕僗偼妋幚偵null傪曉偡傛偆偵偟偨丅
* @param jclass 俰倎倴倎懁偺僋儔僗
* @param IID 僀儞僞乕僼僃乕僗俬俢
* @result 巜掕偟偨僀儞僞乕僼僃乕僗傪曉偟傑偡丅
* 幐攕偡傞偲null傪曉偟傑偡丅
* @see GUID
*/
public synchronized IUnknown queryInterface(Class jclass, GUID IID) throws JComException {
try {
int pIUnknown = _queryInterface(IID);
if(pIUnknown == 0) return null; // no interface
// 僋儔僗柤偺僐儞僗僩儔僋僞傪屇傇丅堷悢偼(ReleaseManager rm, int pIUnknown);
Class[] param = new Class[2];
param[0] = ReleaseManager.class;
param[1] = Integer.TYPE;
Constructor constructor = jclass.getConstructor(param);
Object[] p = new Object[2];
p[0] = rm;
p[1] = new Integer(pIUnknown);
IUnknown com = (IUnknown)constructor.newInstance(p);
// ReleaseManager偵搊榐
rm.add(com);
return com;
}
// JComException偼忋偵搳偘傞丅
catch(JComException e) { throw e; }
catch(Exception e) { e.printStackTrace(); }
return null;
}
/**
* QueryInterface傪幚峴偟丄巜掕偟偨僀儞僞乕僼僃乕僗傪庢摼偟傑偡丅
* IID 偲 Java懁偺僋儔僗柤傪巜掕偟偰壓偝偄丅
* @param classname 俰倎倴倎懁偺僋儔僗柤
* @param IID 僀儞僞乕僼僃乕僗俬俢
* @result 巜掕偟偨僀儞僞乕僼僃乕僗傪曉偟傑偡丅
* 幐攕偡傞偲null傪曉偟傑偡丅
* @see GUID
* @deprecation #queryInterface(Class, GUID)
*/
public synchronized IUnknown queryInterface(String classname, GUID IID)
throws JComException, ClassNotFoundException {
Class jclass = Class.forName(classname);
return queryInterface(jclass, IID);
}
/**
* COM僆僽僕僃僋僩傪夝曻偟傑偡丅
* ReleaseManager傪巊偊偽丄柧帵揑偵屇傇昁梫偼偁傝傑偣傫丅
* 偡偱偵夝曻偝傟偰偄偨応崌丄false傪曉偟傑偡丅
* @result 惓忢廔椆偺応崌偼<code> true </code>傪曉偟傑偡丅
* 偡偱偵夝曻偝傟偰偄偨応崌偼丄<code> false </code>傪曉偟傑偡丅
*/
public synchronized boolean release() {
return _release();
}
/**
* 嶲徠僇僂儞僞傪侾偮偁偘丄尰嵼偺僇僂儞僞抣傪曉偟傑偡丅
* 捠忢屇傇昁梫偼偁傝傑偣傫丅
* 嶲徠僇僂儞僞傪尒偨偄応崌偱偺傒巊梡偟傑偡丅
* 偦偺応崌偼release()傪屇傫偱丄僇僂儞僞傪壓偘偰壓偝偄丅
* @result 嶲徠僇僂儞僞偺抣丅忋偑偭偨抣傪曉偟傑偡丅
* @see #release()
*/
public synchronized int addRef() {
return _addRef();
}
/**
撪晹偱曐帩偟偰偄傞IUnknown僋儔僗丄傑偨偼偦傟偐傜宲彸偟偨僋儔僗偺
僆僽僕僃僋僩傪埲壓偺宍偱昞帵偟傑偡丅
<pre>476eb8(1)jp.ne.so_net.ga2.no_ji.jcom.IDispatch</pre>
侾俇恑悢偼僀儞僞乕僼僃乕僗偺億僀儞僞丄
妵屖偺拞偺悢抣偼嶲徠僇僂儞僞偺悢丄偦偺師偼僋儔僗柤偱偡丅
*/
public String toString() {
String result = Integer.toHexString(pIUnknown) + "(" + (addRef()-1) + ")" + getClass().getName();
release(); // 忋婰addRef()偱僇僂儞僩傾僢僾偟偨嶲徠僇僂儞僞傪侾偮尭傜偡丅
return result;
}
/**
ReleaseManager傪曉偟傑偡丅
埲壓偺宍偱丄尰嵼偺嶲徠僇僂儞僞娗棟僋儔僗傪尒傞偙偲偑偱偒傑偡丅
<pre>System.out.println(excel.getReleaseManager().toString());</pre>
* @see #release()
*/
public ReleaseManager getReleaseManager() { return rm; }
// 俰俶俬
private native int _addRef();
private native boolean _release();
private native int _queryInterface(GUID IID) throws JComException;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -