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

📄 dispatchptr.java

📁 用于Java 组件和通过Windows COM 对象或Windows DLL 来公开的组件之间的互操作
💻 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 + -