activex控件java封装_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[] { "Method Name" });int dispIdMember = regspid[0];//方法调用oleAutomation.invoke(dispIdMember);

2、带参数的方法调用//获取Method Name的ID,Method Name为ActiveX中具体的方法名int[] regspid = oleAutomation.getIDsOfNames(new String[] { "Method Name" });int dispIdMember = regspid[0];//设置方法的具体参数。Variant数组的长度为Method Name方法参数的个数//假设有四个参数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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值