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

📄 itypeinfo.java

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

/**
 * ITypeInfo僀儞僞乕僼僃乕僗傪埖偆偨傔偺僋儔僗
 *
 * @see     IUnknown
 * @see     JComException
 * @see     ReleaseManager
	@author Yoshinori Watanabe(搉曈 媊懃)
	@version 2.10, 2000/07/01
	Copyright(C) Yoshinori Watanabe 1999-2000. All Rights Reserved.
 */
public class ITypeInfo extends IUnknown {
    /**
		IID_ITypeInfo 偱偡丅
		@see       GUID
	*/
	public static GUID IID = new GUID( 0x00020401, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 );
    /**
     * ITypeInfo傪嶌惉偟傑偡丅
	 * 堷悢pITypeInfo偼ITypeInfo僀儞僞乕僼僃乕僗偺億僀儞僞傪巜掕偟傑偡丅
     * @param     rm             嶲徠僇僂儞僞娗棟僋儔僗
     	@param	pITypeInfo	ITypeInfo僀儞僞乕僼僃乕僗
     * @see       ReleaseManager
	 */
	public ITypeInfo(ReleaseManager rm, int pITypeInfo) {
		super(rm, pITypeInfo);
	}
	/**
		巜掕偟偨儊儞僶ID偺僪僉儏儊儞僩傪曉偟傑偡丅
		儊儞僶俬俢偼FuncDesc僋儔僗偺memid偵偁傝傑偡丅
		MEMBERID_NIL(-1)傪巜掕偟偨応崌偼偙偺僆僽僕僃僋僩偵懳偡傞僪僉儏儊儞僩傪曉偟傑偡丅
		栠傝抣偼係偮暘偺暥帤楍偺攝楍偱丄偦傟偧傟埲壓偺抣偑奿擺偝傟偰偄傑偡丅
		僇僢僐撪偼Excel.Application偺応崌偺抣偱偡丅
		抣偺側偄傕偺偼null偵側偭偰偄傑偡丅
		<pre>
		栠傝抣[0]	bstrName        偙偺柤慜丅("_Application")
		栠傝抣[1]	btrDocString    僪僉儏儊儞僩(null)
		栠傝抣[2]	dwHelpContext    僿儖僾僐儞僥僉僗僩偺斣崋傪暥帤楍偵曄偊偨傕偺("131073")
		栠傝抣[3]	bstrHelpFile	僿儖僾僼傽僀儖偺僼儖僷僗("D:\Office97\Office\VBAXL8.HLP")
		<pre>
	*/
	public String[] getDocumentation(int memid) throws JComException {
		return _getDocumentation(memid);
	}
	public static final int MEMBERID_NIL = -1;
	/**
		TypeAttr傪曉偟傑偡丅
		TypeAttr偼ITypeInfo偺懏惈傪娗棟偡傞僋儔僗偱偡丅
		@see	ITypeInfo.TypeAttr
	*/
	public TypeAttr getTypeAttr() throws JComException {
		return _getTypeAttr();
	}
	/**
		巜掕偟偨index偺FuncDesc傪曉偟傑偡丅
		FuncDesc偼儊僜僢僪偺忣曬傪娗棟偡傞僋儔僗偱偡丅
		@see	ITypeInfo.FuncDesc
	*/
	public FuncDesc getFuncDesc(int index) throws JComException {
		return _getFuncDesc(index);
	}
	/**
		巜掕偟偨index偺VarDesc傪曉偟傑偡丅
		VarDesc偼曄悢(捠忢偼Enum宆)偺忣曬傪娗棟偡傞僋儔僗偱偡丅
		@see	ITypeInfo.VarDesc
	*/
	public VarDesc getVarDesc(int index) throws JComException {
		return _getVarDesc(index);
	}
	/**
		偙偺僆僽僕僃僋僩偑懏偟偰偄傞ITypeLib傪曉偟傑偡丅
		@see	ITypeLib
	*/
	public ITypeLib getTypeLib() throws JComException {
		return new ITypeLib(rm, _getTypeLib());
	}
	/**
		偙偺僋儔僗偑COCLASS偺偲偒丄幚嵺偵幚憰偟偰偄傞宆忣曬傪曉偟傑偡丅
	*/
	public ITypeInfo getImplType(int index) throws JComException {
		return new ITypeInfo(rm, _getImplType(index));
	}
	/**
		hreftype偱巜掕偝傟偨ITypeInfo傪曉偟傑偡丅
		@see ITypeInfo.ElemDesc#getTypeDesc()
	*/
	public ITypeInfo getRefTypeInfo(int hreftype) throws JComException {
		return new ITypeInfo(rm, _getRefTypeInfo(hreftype));
	}
	/**
		宆忣曬偑VT_USERDEFINED偺偲偒丄偦偙偐傜HREFTYPE傪庢傝弌偟傑偡丅
		HREFTYPE偼16恑悢偱昞偝傟偰偄傑偡丅
	*/
	public static int getRefTypeFromTypeDesc(String type) {
		return Integer.parseInt(type.substring(type.indexOf('(')+1, type.indexOf(')')),16);
	}
	/**
		偙偺僆僽僕僃僋僩偲懠偺僆僽僕僃僋僩偑摍偟偄偐偳偆偐傪帵偟傑偡丅 
		ITypeInfo.TypeAttr.IID 偵傛傝摨堦偺宆忣曬偐偳偆偐傪敾抐偟偰偄傑偡丅
		@see ITypeInfo.TypeAttr#getIID()
	*/
	public boolean equals(Object obj) {
		if(! (obj instanceof ITypeInfo)) return false;
		ITypeInfo info = (ITypeInfo)obj;
		try {
			return info.getTypeAttr().getIID().equals(this.getTypeAttr().getIID());
		} catch(JComException e) { e.printStackTrace(); }
		return false;
	}
	/**
		ITypeInfo偺懏惈傪娗棟偡傞僋儔僗偱偡丅
		GUID丄娭悢偺悢丄曄悢偺悢傪曉偟傑偡丅
		曄悢偼捠忢偼掕悢偱丄僾儘僷僥傿偲偼堎側傝傑偡丅
		僾儘僷僥傿偺愝掕丄庢摼偼娭悢偵娷傑傟傑偡丅
		@see	ITypeInfo
	*/
	public class TypeAttr {
		public static final int TKIND_ENUM      = 0;
		public static final int TKIND_RECORD    = 1;
		public static final int TKIND_MODULE    = 2;
		public static final int TKIND_INTERFACE = 3;
		public static final int TKIND_DISPATCH  = 4;
		public static final int TKIND_COCLASS   = 5;
		public static final int TKIND_ALIAS     = 6;
		public static final int TKIND_UNION     = 7;
		public static final int TKIND_MAX       = 8;

		private GUID IID;
		private int cFuncs;
		private int cVars;
		private int cImplTypes;
		private int typekind;
		public TypeAttr(GUID IID, int typekind, int cFuncs, int cVars, int cImplTypes) {
			this.IID        = IID;
			this.typekind   = typekind;
			this.cFuncs     = cFuncs;
			this.cVars      = cVars;
			this.cImplTypes = cImplTypes;
		}
		public GUID getIID() { return IID; }
		public int getTypeKind() { return typekind; }
		public int getFuncs() { return cFuncs; }
		public int getVars() { return cVars; }
		public int getImplTypes() { return cImplTypes; }
	}


	/**
		侾偮偺堷悢傗栠傝抣側偳偺宆偺忣曬傪帩偪傑偡丅
		俠俷俵偺ELEMDESC峔憿懱傪昞偡僋儔僗偱偡丅
		[in out]側偳偺忣曬偲丄宆 VT_PTR+VT_BSTR 側偳偺忣曬傪帩偪傑偡丅
		VT_USERDEFINED傪帩偮応崌丄帺摦揑偵偦偺僋儔僗柤傪庢摼偟丄
		幚嵺偺暥帤楍偵抲偒姺偊傑偡丅
		宆偼暥帤楍偺宍偱曐帩偟丄Java屳姺偺宍偵側傝傑偡丅偡側傢偪丄
		VT_PTR|VT_I4偼 "[I"丄VT_UNKNOWN偼"Ljp.ne.so_net.ga2.no_ji.jcom.IUnknown"偵
		側傝傑偡丅
		@see	ITypeInfo.FuncDesc
	*/
	public class ElemDesc {
		public static final int IDLFLAG_FIN     = 0x01;
		public static final int IDLFLAG_FOUT    = 0x02;
		public static final int IDLFLAG_FLCID   = 0x04;
		public static final int IDLFLAG_FRETVAL = 0x08;
		private int idl;	// IDLFLAG_XXX偺慻傒崌傢偣
		private String typedesc;	// 宆忣曬 "VT_INT"
		public ElemDesc(String typedesc, int idl) {
			this.typedesc = typedesc;
			this.idl = idl;
		}
		public int getIDL() { return idl; }
		/**
			宆忣曬傪曉偟傑偡丅埲壓偺宍幃偱偡丅
			"VT_I4" "VT_BSTR" "VT_DISPATCH" "VT_PTR+VT_I4"
			"VT_SAFEARRAY+VT_I4"
			"VT_USERDEFINED(1):VBE"
			VT_USERDEFINED偺妵屖撪偺悢抣偼16恑悢偱昞偟偨偺hreftype偱丄偦偺悢抣傪
			getRefTypeInfo()偵搉偡偙偲偵傛傝丄偦偺抣偺ITypeInfo傪
			庢摼偡傞偙偲偑偱偒傑偡丅
		*/
		public String getTypeDesc() { return typedesc; }
		public String toString() {
			if(idl==0) return typedesc;
			String result = "";
			if((idl & IDLFLAG_FIN)!=0) result += "[in]";
			if((idl & IDLFLAG_FOUT)!=0) result += "[out]";
			if((idl & IDLFLAG_FLCID)!=0) result += "[lcid]";	// ???
			if((idl & IDLFLAG_FRETVAL)!=0) result += "[retval]";
			return result + typedesc;
		}
	}
	
	/**
		儊僜僢僪偺忣曬傪娗棟偡傞僋儔僗偱偡丅
		儊儞僶俬俢丄偍傛傃屇傃弌偟宍幃丄堷悢偺宆傗栠傝抣偺宆側偳傪
		帩偪傑偡丅
		@see	ITypeInfo.ElemDesc
		@see	ITypeInfo
	*/
	public class FuncDesc {
		private int memid;					// 儊儞僶ID(0乣)
		private int invkind;				// INVOKE_XXX偺偄偢傟偐
		private ElemDesc[] elemdescParam;	// 堷悢偺宆
		private ElemDesc elemdescFunc;		// 栠傝抣偺宆
		public static final int INVOKE_FUNC           = 0x01;
		public static final int INVOKE_PROPERTYGET    = 0x02;
		public static final int INVOKE_PROPERTYPUT    = 0x04;
		public static final int INVOKE_PROPERTYPUTREF = 0x08;
		/**
			儊僜僢僪偺忣曬傪惗惉偟傑偡丅
			ITypeInfo.getFuncDesc()撪偱巊梡偝傟傑偡丅
			捠忢丄奜晹偐傜偼巊梡偟傑偣傫丅
			@see	ITypeInfo#getFuncDesc(int)
		*/
		public FuncDesc(int memid, int invkind, ElemDesc[] elemdescParam, ElemDesc elemdescFunc) {
			this.memid = memid;
			this.invkind = invkind;
			this.elemdescParam = elemdescParam;
			this.elemdescFunc = elemdescFunc;
		}
		/**
			儊僜僢僪偺忣曬傪昞帵偟傑偡丅
		*/
		public String toString() {
			try {
				String[] names = getNames();
				String result = "";
				switch(invkind) {
					case INVOKE_FUNC:			result += "FUNC ";
						break;
					case INVOKE_PROPERTYGET:	result += "GET ";	break;
					case INVOKE_PROPERTYPUT:	result += "PUT ";	break;
					case INVOKE_PROPERTYPUTREF:	result += "PUTREF ";	break;
				}
				result += names[0] + "(";
				if(elemdescParam!=null) {
					for(int i=0; i<elemdescParam.length; i++) {
						result += elemdescParam[i].toString() + " ";
						if(i+1<names.length) result += names[i+1];
						if(i!=elemdescParam.length-1) result += ",";
					}
				}
				result += ")"+elemdescFunc.toString();
				return result;
			}
			catch(Exception e) {}
			return null;
/*
			try {
				String[] names = getNames();
				String result = "";
				switch(invkind) {
					case INVOKE_FUNC:			result += "FUNC ";	break;
					case INVOKE_PROPERTYGET:	result += "GET ";	break;
					case INVOKE_PROPERTYPUT:	result += "PUT ";	break;
					case INVOKE_PROPERTYPUTREF:	result += "PUTREF ";	break;
				}
				result += names[0] + "(";
				if(elemdescParam!=null) {
					for(int i=0; i<elemdescParam.length; i++) {
						result += elemdescParam[i].toString() + " " + names[i+1];
						if(i!=elemdescParam.length-1) result += ",";
					}
				}
				result += ")"+elemdescFunc.toString();
				return result;
			}
			catch(Exception e) {}
			return null;
*/
		}
		/**
			儊儞僶俬俢傪曉偟傑偡丅0埲忋偺抣偱偡丅
		*/
		public int getMemID() { return memid; }
		/**
			屇傃弌偟宍幃傪曉偟傑偡丅
			INVOKE_XXX偺偄偢傟偐偱偡丅
			@see	ITypeInfo.FuncDesc#INVOKE_FUNC
			@see	ITypeInfo.FuncDesc#INVOKE_PROPERTYGET
			@see	ITypeInfo.FuncDesc#INVOKE_PROPERTYPUT
			@see	ITypeInfo.FuncDesc#INVOKE_PROPERTYPUTREF
		*/
		public int getInvokeKind() { return invkind; }
		/**
			堷悢偺忣曬傪曉偟傑偡丅
			堷悢偑側偄応崌偼<code>null</code>傪曉偟傑偡丅
			@see	ITypeInfo.ElemDesc
		*/
		public ElemDesc[] getParams() { return elemdescParam; }
		/**
			栠傝抣偺忣曬傪曉偟傑偡丅
			@see	ITypeInfo.ElemDesc
		*/
		public ElemDesc getFunc() { return elemdescFunc; }
		/**
			儊僜僢僪偺柤慜丄堷悢偺柤慜傪曉偟傑偡丅
			偳偆傗傜丄[0]偑儊僜僢僪柤丄[1]埲崀偑堷悢偺柤慜偺傛偆偱偡丅
		*/
		public String[] getNames() throws JComException {
			return _getNames(memid);
		}
	}

	/**
		撪晹曄悢偺忣曬傪娗棟偡傞僋儔僗偱偡丅
		捠忢丄Enum宆偺掕悢偵巊傢傟傑偡丅
		@see	ITypeInfo
		@see	ITypeInfo.ElemDesc
	*/
	public class VarDesc {
		private int memid;					// 儊儞僶ID(0乣)
		private int varkind;				// VAR_XXX偺偄偢傟偐
		private ElemDesc elemdescVar;		// 曄悢偺宆
		private Object   varValue;			// 栠傝抣偺宆
		public static final int VAR_PERINSTANCE = 0;
		public static final int VAR_STATIC      = 1;
		public static final int VAR_CONST       = 2;
		public static final int VAR_DISPATCH    = 3;
		/**
			儊僜僢僪偺忣曬傪惗惉偟傑偡丅
			ITypeInfo.getFuncDesc()撪偱巊梡偝傟傑偡丅
			捠忢丄奜晹偐傜偼巊梡偟傑偣傫丅
			@see	ITypeInfo#getFuncDesc(int)
		*/
		public VarDesc(int memid, int varkind, ElemDesc elemdescVar, Object varValue) {
			this.memid = memid;
			this.varkind = varkind;
			this.elemdescVar = elemdescVar;
			this.varValue = varValue;
		}
		/**
			儊僜僢僪偺忣曬傪昞帵偟傑偡丅
		*/
		public String toString() {
			try {
				String[] names = getNames();
				String result = "";
				switch(varkind) {
					case VAR_PERINSTANCE:	result += "PERINSTANCE ";	break;
					case VAR_STATIC:		result += "STATIC ";		break;
					case VAR_CONST:			result += "CONST ";			break;
					case VAR_DISPATCH:		result += "DISPATCH ";		break;
				}
				result += elemdescVar.toString() + " " + names[0] + " = " + varValue.toString();
				return result;
			}
			catch(Exception e) {}
			return null;
		}
		/**
			儊儞僶俬俢傪曉偟傑偡丅0埲忋偺抣偱偡丅
		*/
		public int getMemID() { return memid; }
		/**
			曄悢偺宍幃傪曉偟傑偡丅
			VAR_XXX偺偄偢傟偐偱偡丅
			@see	ITypeInfo.VarDesc#VAR_PERINSTANCE
			@see	ITypeInfo.VarDesc#VAR_STATIC
			@see	ITypeInfo.VarDesc#VAR_CONST
			@see	ITypeInfo.VarDesc#VAR_DISPATCH
		*/
		public int getVarKind() { return varkind; }
		/**
			曄悢偺宆偺忣曬傪曉偟傑偡丅
			@see	ITypeInfo.ElemDesc
		*/
		public ElemDesc getVar() { return elemdescVar; }
		/**
			儊僜僢僪偺柤慜丄堷悢偺柤慜傪曉偟傑偡丅
			偳偆傗傜丄[0]偑儊僜僢僪柤丄[1]埲崀偑堷悢偺柤慜偺傛偆偱偡丅
		*/
		public String[] getNames() throws JComException {
			return _getNames(memid);
		}
		/**
			曄悢偺抣傪曉偟傑偡丅
		*/
		public Object getValue() { return varValue; }
	}

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

	// JNI
	private native String[] _getDocumentation(int memid) throws JComException;
	private native String[] _getNames(int memid) throws JComException;
	private native TypeAttr _getTypeAttr() throws JComException;
	private native FuncDesc _getFuncDesc(int index) throws JComException;
	private native VarDesc  _getVarDesc(int index) throws JComException;
	private native int      _getImplType(int index) throws JComException;
	private native int      _getTypeLib() throws JComException;		// ITypeInfo::GetContainingTypeLib()
	private native int      _getRefTypeInfo(int hreftype) throws JComException;		// ITypeInfo::GetRefTypeInfo()

}

/*
	FuncDesc 傗 ElemDesc 偼丄堦墳丄奜晹偐傜曄峏偑偱偒側偄傛偆偵偟偰偄傞丅
	偡側傢偪丄儊儞僶偼private偵偟丄get宯偟偐懳墳偟偰偄側偄丅
	偨偩丄偳偪傜傕僐儞僗僩儔僋僞偼public側偺偱姰慡偲偼尵偊側偄丅
	俰俶俬撪晹偱惗惉偡傞昁梫偑偁傞偐傜偱偡丅
	僨僓僀儞僷僞乕儞偺singleton偺峫偊偑擖偭偰偄傑偡丅

	偟偐偟丄崱擭偺壞傕弸偄乣丅
2000-07-23
	COCLASS偭偰側傫偠傖偁乣両両両両

*/

⌨️ 快捷键说明

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