java activex 开发教程_swt java 内嵌activeX控件

这里用的是SWT/JFace开发application中SWT自带的org.eclipse.swt.ole.win32 包可以支持内嵌OLE和ActiveX。具体用法如下:

//创建一个OleFrame做为OLE(或ActiveX)的框架OleFrame oleFrame = new OleFrame(this, SWT.NONE);//创建ActiveX的容器,其中的classID是ActiveX的classid,在注册表中可以找到OleControlSite oleControl = new OleControlSite(oleFrame, SWT.NONE, “classID”);//OleAutomation类用来执行ActiveX中的方法OleAutomation oleAutomation = new OleAutomation(oleControl);//将ActiveX显示在application中oleControl.doVerb(OLE.OLEIVERB_SHOW);

调用AcitveX中方法的具体过程:1、不带参数的方法调用//获取Method Name的ID,Method Name为ActiveX中具体的方法名int[] regspid = oleAutomation.getIDsOfNames(new String[] { "MethodName" });int dispIdMember = regspid[0];//方法调用oleAutomation.invoke(dispIdMember);

2、带参数的方法调用//获取Method Name的ID,Method Name为ActiveX中具体的方法名int[] regspid = oleAutomation.getIDsOfNames(new String[] { "MethodName" });int dispIdMember = regspid[0];//设置方法的具体参数。Variant数组的长度为MethodName方法参数的个数//假设有四个参数Variant[] rgvarg = new Variant[4];rgvarg[0] = new Variant(fileID);rgvarg[1] = new Variant(itdsURL);rgvarg[2] = new Variant(idType);rgvarg[3] = new Variant(reportURL);//方法调用oleAutomation.invoke(dispIdMember, rgvarg);

调用OLE Exemple:Java程序内嵌Word应用程序

package test.swt;

import java.io.File;

import org.eclipse.swt.SWT;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.ole.win32.OLE;import org.eclipse.swt.ole.win32.OleClientSite;import org.eclipse.swt.ole.win32.OleFrame;import org.eclipse.swt.widgets.Button;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.widgets.Composite;public class ActiveXTest{

private Shell sShell = null;private Button button = null;private OleClientSite clientSite;public static void main(String[] args){

Display display =Display.getDefault();ActiveXTest thisClass = new ActiveXTest();thisClass.createSShell();thisClass.sShell.open();

while (!thisClass.sShell.isDisposed()){    if (!display.readAndDispatch())    display.sleep();}    display.dispose();

}

/*** This method initializes sShell*/private void createSShell(){GridData gridData = new GridData();gridData.horizontalSpan = 2;GridLayout gridLayout = new GridLayout();gridLayout.numColumns = 3;sShell = new Shell();sShell.setText("Shell");sShell.setLayout(gridLayout);sShell.setSize(new Point(800, 600));OleFrame frame = new OleFrame(sShell, SWT.NONE);button = new Button(sShell, SWT.NONE);button.setLayoutData(gridData);button.setText("Save");button.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {public void widgetSelected(org.eclipse.swt.events.SelectionEvent e){clientSite.save(new File("d:/test.docx"),true);}});frame.setSize(800,600);clientSite = new OleClientSite(frame, SWT.NONE,"Word.Document.8");clientSite.setSize(400,400);clientSite.doVerb(OLE.OLEIVERB_SHOW);}

}

SWT调用ActiveX简单总结

public class SWT_ActivexUtil {private OleFrame _frame;private OleControlSite _site;private OleAutomation _auto;SWT_ActivexUtil(String activexId, OleControlSite site){if(site == null){Shell shell = new Shell();_frame = new OleFrame(shell, SWT.NONE);_site = new OleControlSite(_frame, SWT.NONE, activexId);_auto = new OleAutomation(_site);}else{_site = site;_auto = new OleAutomation(site);; }}

public int getID(String name){try {int[] ids = _auto.getIDsOfNames(new String[]{name});if(ids.length>=0)return ids[0];} catch (RuntimeException e) { e.printStackTrace(); }return -1;}

public Variant[] createVariants(String[] paras){Variant[] vr = new Variant[paras.length];for(int i=0;i

public Variant getProperty(String prop){int propId = getID(prop);Variant v = null;try {v = _auto.getProperty(propId);} catch (Exception e) {e.printStackTrace();}return v; }

public void setProperty(String name, String... params){int propId = getID(name);if(propId < 0)return;if(params.length==1)_auto.setProperty(propId, new Variant(params[0]));else{Variant[] vs = new Variant[params.length];int i=0;for(String param:params){vs[i] = new Variant(param);i++; }_auto.setProperty(propId, vs);}}

public void setProperty(String name, Variant... params){int propId = getID(name);if(propId < 0)return;_auto.setProperty(propId, params);}public Variant execute(String methodName, Variant... params){int mid = getID(methodName);if(mid<0)return null;Variant rtnv;if(params == null)rtnv = _auto.invoke(mid);elsertnv = _auto.invoke(mid, params);return rtnv;}    public Variant execute(String methodName){    int mid = getID(methodName);    if(mid<0)        return null;    Variant rtnv = _auto.invoke(mid);    return rtnv;}

public void addEventListener(int eventID, OleListener listener){        _site.addEventListener(eventID, listener);    }    public void removeEventListener(int eventID, OleListener listener){        _site.removeEventListener(eventID, listener);    }}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值