blob: 17673445cc784c272016a52bbc8644b974002470 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and Others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Takashi ITOH - initial API and implementation
*******************************************************************************/
package org.eclipse.actf.util.win32;
import org.eclipse.swt.internal.ole.win32.COM;
import org.eclipse.swt.internal.ole.win32.GUID;
import org.eclipse.swt.ole.win32.OLE;
/**
* COM related utilities. Calling vtable method, creating GUID, and creating
* dispatch object from GUID.
*/
@SuppressWarnings("restriction")
public class COMUtil {
static {
try {
System.loadLibrary("AccessibiltyWin32Library"); //$NON-NLS-1$
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create dispatch object from GUID
*
* @param rclsid
* GUID
* @return dispatch object
*/
public static int createDispatch(GUID rclsid) {
int[] ppv = new int[1];
int result = COM.CoCreateInstance(rclsid, 0, COM.CLSCTX_INPROC_HANDLER
| COM.CLSCTX_INPROC_SERVER | COM.CLSCTX_LOCAL_SERVER
| COM.CLSCTX_REMOTE_SERVER, COM.IIDIDispatch, ppv);
if (result != OLE.S_OK)
OLE.error(OLE.ERROR_CANNOT_CREATE_OBJECT, result);
return ppv[0];
}
/**
* Calling vtable method
*
* @param fnNumber
* vtable index
* @param ppVtbl
* vtable pointer
* @param arg0
* argument 0
* @return hresult
*/
public static final native int VtblCall(int fnNumber, int ppVtbl, int arg0);
/**
* @param fnNumber
* @param ppVtbl
* @param arg0
* argument 0
* @param arg1
* argument 1
* @return
*/
public static final native int VtblCall(int fnNumber, int ppVtbl, int arg0,
int arg1);
/**
* @param fnNumber
* @param ppVtbl
* @param arg0
* argument 0
* @param arg1
* argument 1
* @param arg2
* argument 2
* @return
*/
public static final native int VtblCall(int fnNumber, int ppVtbl, int arg0,
int arg1, int arg2);
/**
* @param fnNumber
* @param ppVtbl
* @param arg0
* argument 0
* @param arg1
* argument 1
* @param arg2
* argument 2
* @param arg3
* argument 3
* @return
*/
public static final native int VtblCall(int fnNumber, int ppVtbl, int arg0,
int arg1, int arg2, int arg3);
/**
* @param fnNumber
* @param ppVtbl
* @param arg0
* argument 0
* @param arg1
* argument 1
* @param arg2
* argument 2
* @param arg3
* argument 3
* @param arg4
* argument 4
* @return
*/
public static final native int VtblCall(int fnNumber, int ppVtbl, int arg0,
int arg1, int arg2, int arg3, int arg4);
/**
* @param fnNumber
* @param ppVtbl
* @param arg0
* argument 0
* @param arg1
* argument 1
* @param arg2
* argument 2
* @param arg3
* argument 3
* @param arg4
* argument 4
* @param arg5
* argument 5
* @return
*/
public static final native int VtblCall(int fnNumber, int ppVtbl, int arg0,
int arg1, int arg2, int arg3, int arg4, int arg5);
/**
* @param fnNumber
* @param ppVtbl
* @param arg0
* argument 0
* @param arg1
* argument 1
* @param arg2
* argument 2
* @param arg3
* argument 3
* @param arg4
* argument 4
* @param arg5
* argument 5
* @param arg6
* argument 6
* @return
*/
public static final native int VtblCall(int fnNumber, int ppVtbl, int arg0,
int arg1, int arg2, int arg3, int arg4, int arg5, int arg6);
/**
* @param fnNumber
* @param ppVtbl
* @param arg0
* argument 0
* @param arg1
* argument 1
* @param arg2
* argument 2
* @param arg3
* argument 3
* @param arg4
* argument 4
* @param arg5
* argument 5
* @param arg6
* argument 6
* @param arg7
* argument 7
* @return
*/
public static final native int VtblCall(int fnNumber, int ppVtbl, int arg0,
int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7);
/**
* Create GUID from target String
*
* @param lpsz
* target
* @return GUID
*/
public static GUID IIDFromString(String lpsz) {
int length = lpsz.length();
char[] buffer = new char[length + 1];
lpsz.getChars(0, length, buffer, 0);
GUID lpiid = new GUID();
if (COM.IIDFromString(buffer, lpiid) == OLE.S_OK)
return lpiid;
return null;
}
}