swt java embedded activeX control

The org.eclipse.swt.ole.win32 package that comes with SWT in the SWT/JFace development application is used here, which can support embedded OLE and ActiveX.
The specific usage is as follows:
//Create an OleFrame as an OLE (or ActiveX) frame
OleFrame oleFrame = new OleFrame(this, SWT.NONE);
//Create an ActiveX container, where the classID is the ActiveX classid, in the registry OleControlSite can be found
oleControl = new OleControlSite(oleFrame, SWT.NONE, "classID");
//The OleAutomation class is used to execute the method in ActiveX
OleAutomation oleAutomation = new OleAutomation(oleControl);
//Display ActiveX in the application
oleControl.doVerb (OLE.OLEIVERB_SHOW);
The specific process of calling the method in AcitveX:
1. Method call without parameters
//Get the ID of Method Name, Method Name is the specific method name in ActiveX
int[] regspid = oleAutomation.getIDsOfNames(new String [] { "MethodName" });
int dispIdMember = regspid[0];
//Method call
oleAutomation.invoke(dispIdMember);
2. Method call with parameters
//Get ID of Method Name, Method Name is the specific method name in ActiveX
int[] regspid = oleAutomation.getIDsOfNames(new String[] { " MethodName" });
int dispIdMember = regspid[0];
//Set the specific parameters of the method. The length of the Variant array is the number of MethodName method parameters
//Assuming there are four parameters
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);
//method call
oleAutomation.invoke(dispIdMember, rgvarg);
call OLE Exemple: Java program embedded Word application
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<paras.length;i++){
vr[i] = new Variant(paras[i]);
}
return vr;
}
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);
else
rtnv = _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);
}
}



Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326370296&siteId=291194637