📄 dispatchptr.java
字号:
package com.develop.jawin;
import com.develop.jawin.marshal.*;
import com.develop.jawin.constants.*;
import com.develop.jawin.win32.*;
import com.develop.io.*;
import java.io.*;
public class DispatchPtr extends COMPtr implements DispatchConstants {
static public final void init() {}
static public final GUID proxyIID = IID_IDispatch;
static public final int iidToken;
static {
iidToken = IdentityManager.registerProxy(proxyIID, DispatchPtr.class);
}
public int getGuidToken() {
return iidToken;
}
public DispatchPtr() {
}
public DispatchPtr(String progid) throws COMException {
COMPtr cp = Ole32.GetFromProgID(progid, proxyIID);
stealUnknown(cp);
}
public DispatchPtr(GUID guid) throws COMException {
//Using CLSCTX_ALL causes inproc/local objects to fail to load...
COMPtr cp = Ole32.CoCreateInstance(guid, Ole32.CLSCTX_INPROC_SERVER | Ole32.CLSCTX_LOCAL_SERVER, proxyIID);
stealUnknown(cp);
}
//COMEBACK and use QI
protected DispatchPtr(IUnknown unk) throws COMException {
DispatchPtr src = (DispatchPtr) unk;
stealUnknown(src);
}
public Object get(String prop) throws COMException {
return getN(prop, new Object[0], 0);
}
public DispatchPtr getObject(String prop) throws COMException {
return (DispatchPtr) get(prop);
}
public Object get(String prop, Object index) throws COMException {
return getN(prop, new Object[] { index }, 1);
}
public Object getN(String prop, Object[] indexes) throws COMException {
return getN(prop, indexes, indexes.length);
}
public Object getN(String prop, Object[] indexes, int indexesExpected) throws COMException {
NakedByteStream nbs = new NakedByteStream();
LittleEndianOutputStream leos = new LittleEndianOutputStream(nbs);
// Marshal missing args
int extra = indexesExpected-indexes.length;
try {
for (int n=0; n<extra; n++) {
leos.writeShort(VarTypes.VT_ERROR);
}
} catch (IOException e) {
throw new COMException(e);
}
// Marshal specified args right to left
int last = indexes.length-1;
for (int n=last; n>=0; n--) {
Variant.marshalIn(indexes[n], leos);
}
byte[] result = GenericStub.dispatchInvoke(invokeInst[indexesExpected] + "V",
indexesExpected, leos.size(),
nbs.getInternalBuffer(), prop, DISPATCH_PROPERTYGET, getPeer(), getUnknown());
LittleEndianInputStream leis = new LittleEndianInputStream(
new ByteArrayInputStream(result));
return Variant.marshalOut(leis);
}
public DispatchPtr getObject(String prop, Object index) throws COMException {
return (DispatchPtr) get(prop, index);
}
public void put(String prop, Object index, Object val) throws COMException {
putN(prop, new Object[] { index }, 1, val);
}
public void put(String prop, Object val) throws COMException {
putN(prop, new Object[0], 0, val);
}
public void put(String prop, boolean val) throws COMException {
put(prop, new Boolean(val));
}
public void put(String prop, int val) throws COMException {
put(prop, new Integer(val));
}
public void put(String prop, float val) throws COMException {
put(prop, new Float(val));
}
public void put(String prop, double val) throws COMException {
put(prop, new Double(val));
}
public void put(String prop, Object index, boolean val) throws COMException {
put(prop, index, new Boolean(val));
}
public void put(String prop, Object index, int val) throws COMException {
put(prop, index, new Integer(val));
}
public void put(String prop, Object index, float val) throws COMException {
put(prop, index, new Float(val));
}
public void put(String prop, Object index, double val) throws COMException {
put(prop, index, new Double(val));
}
public void putN(String prop, Object[] indexes, Object val) throws COMException {
putN(prop, indexes, indexes.length, val);
}
public void putN(String prop, Object[] indexes, int indexesExpected, Object val) throws COMException {
NakedByteStream nbs = new NakedByteStream();
LittleEndianOutputStream leos = new LittleEndianOutputStream(nbs);
// Marshal property value first
Variant.marshalIn(val, leos);
// Marshal missing args
int extra = indexesExpected-indexes.length;
try {
for (int n=0; n<extra; n++) {
leos.writeShort(VarTypes.VT_ERROR);
}
} catch (IOException e) {
throw new COMException(e);
}
// Marshal specified args right to left
int last = indexes.length-1;
for (int n=last; n>=0; n--) {
Variant.marshalIn(indexes[n], leos);
}
GenericStub.dispatchInvoke(invokeInst[indexesExpected+1], indexesExpected+1,
leos.size(), nbs.getInternalBuffer(),
prop, DISPATCH_PROPERTYPUT, getPeer(), getUnknown());
}
public Object invoke(String meth) throws COMException {
return invokeN (meth, new Object[] {});
}
public Object invoke(String meth, Object arg1) throws COMException {
return invokeN (meth, new Object[] {arg1});
}
public Object invoke(String meth, int arg1) throws COMException {
return invoke (meth, new Integer(arg1));
}
public Object invoke(String meth, int arg1, int arg2) throws COMException {
return invoke (meth, new Integer(arg1), new Integer(arg2));
}
public Object invoke(String meth, Object arg1, Object arg2) throws COMException {
return invokeN (meth, new Object[] {arg1, arg2});
}
public Object invoke(String meth, Object arg1, Object arg2, Object arg3) throws COMException {
return invokeN (meth, new Object[] {arg1, arg2, arg3});
}
public Object invoke(String meth, Object arg1, Object arg2, Object arg3, Object arg4) throws COMException {
return invokeN (meth, new Object[] {arg1, arg2, arg3, arg4});
}
public Object invokeN(String meth, Object[] args) throws COMException {
return invokeN(meth, args, args.length);
}
public Object invokeN(String meth, Object[] args, int argsExpected) throws COMException {
try {
NakedByteStream nbs = new NakedByteStream();
LittleEndianOutputStream leos = new LittleEndianOutputStream(nbs);
//arguments marshal from right to left. First, missing args:
int extra = argsExpected-args.length;
for (int n=0; n<extra; n++) {
leos.writeShort(VarTypes.VT_ERROR);
}
//Second: specified args
int last=args.length-1;
for (int n=0; n<args.length; n++) {
Variant.marshalIn(args[last-n], leos);
}
byte[] result = GenericStub.dispatchInvoke(invokeInst[argsExpected] + "V", argsExpected, leos.size(),
nbs.getInternalBuffer(), meth, DISPATCH_METHOD, getPeer(), getUnknown());
LittleEndianInputStream leis = new LittleEndianInputStream(
new ByteArrayInputStream(result));
return Variant.marshalOut(leis);
} catch (IOException ioe) {
throw new COMException(ioe);
}
}
public static final String invokeInst[] = {
":",
"v:",
"vv:",
"vvv:",
"vvvv:",
"vvvvv:",
"vvvvvv:",
"vvvvvvv:",
"vvvvvvvv:",
"vvvvvvvvv:",
"vvvvvvvvvv:",
"vvvvvvvvvvv:",
"vvvvvvvvvvvv:",
"vvvvvvvvvvvvv:",
"vvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv:",
"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv:",
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -