调用AcitveX中方法

我这里用的是SWT/JFace开发application,SWT自带的org.eclipse.swt.ole.win32 包可以支 持内嵌OLE和ActiveX。 
具体用法如下: 
//创建一个OleFrame做为OLE(或ActiveX)的框架 
OleFrame oleFrame = new OleFrame(this, SWT.NONE); 
//创建ActiveX的容器,其中的classID是ActiveX的claid,在注册表中可以找到 
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 geftest.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); 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值