Bug 572119 - [Browser][Edge] cookie setting/getting does not work

Implement cookie getting, setting and clearing for Edge Browser
back-end. Note that due to a limitation of the Edge API, cookie
access only works if a Browser instance is available.

Change-Id: I8e85dd5ca3bf381bb8a7a6be8f66fd0e03d6ea19
Signed-off-by: Nikita Nemkin <nikita@nemkin.ru>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/182208
Tested-by: Niraj Modi <niraj.modi@in.ibm.com>
Reviewed-by: Niraj Modi <niraj.modi@in.ibm.com>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java
index e6ddfd1..b24c29e 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java
@@ -252,7 +252,7 @@
  * Example value strings:
  * <code>foo=bar</code> (basic session cookie)
  * <code>foo=bar; path=/; domain=.eclipse.org</code> (session cookie)
- * <code>foo=bar; expires=Thu, 01-Jan-2030 00:00:01 GMT</code> (persistent cookie)
+ * <code>foo=bar; expires=Tue, 01-Jan-2030 00:00:01 GMT</code> (persistent cookie)
  * <code>foo=; expires=Thu, 01-Jan-1970 00:00:01 GMT</code> (deletes cookie <code>foo</code>)
  *
  * @param value the cookie value
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java
index 22caa57..0f5dec7 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java
@@ -13,7 +13,9 @@
  *******************************************************************************/
 package org.eclipse.swt.browser;
 
+import java.net.*;
 import java.nio.charset.*;
+import java.time.*;
 import java.util.*;
 import java.util.function.*;
 
@@ -44,6 +46,7 @@
 
 	static String DataDir;
 	static ICoreWebView2Environment Environment;
+	static ArrayList<Edge> Instances = new ArrayList<>();
 
 	ICoreWebView2 webView;
 	ICoreWebView2_2 webView_2;
@@ -55,6 +58,113 @@
 	boolean inNewWindow;
 	HashMap<Long, LocationEvent> navigations = new HashMap<>();
 
+	static {
+		NativeClearSessions = () -> {
+			ICoreWebView2CookieManager manager = getCookieManager();
+			if (manager == null) return;
+
+			long[] ppv = new long[1];
+			int hr = callAndWait(ppv, completion -> manager.GetCookies(null, completion));
+			if (hr != COM.S_OK) error(SWT.ERROR_NO_HANDLES, hr);
+			ICoreWebView2CookieList cookieList = new ICoreWebView2CookieList(ppv[0]);
+
+			int[] count = new int[1], isSession = new int[1];
+			cookieList.get_Count(count);
+			for (int i = 0; i < count[0]; i++) {
+				hr = cookieList.GetValueAtIndex(i, ppv);
+				if (hr != COM.S_OK) error(SWT.ERROR_NO_HANDLES, hr);
+				ICoreWebView2Cookie cookie = new ICoreWebView2Cookie(ppv[0]);
+				cookie.get_IsSession(isSession);
+				if (isSession[0] != 0) {
+					manager.DeleteCookie(cookie);
+				}
+				cookie.Release();
+			}
+			cookieList.Release();
+			manager.Release();
+
+			// Bug in WebView2. DeleteCookie is asynchronous. Wait a short while for it to take effect.
+			try {
+				Thread.sleep(5);
+			} catch (InterruptedException e) {
+				Thread.currentThread().interrupt();
+			}
+		};
+
+		NativeGetCookie = () -> {
+			ICoreWebView2CookieManager manager = getCookieManager();
+			if (manager == null) return;
+
+			char[] uri = stringToWstr(CookieUrl);
+			long[] ppv = new long[1];
+			int hr = callAndWait(ppv, completion -> manager.GetCookies(uri, completion));
+			if (hr != COM.S_OK) error(SWT.ERROR_NO_HANDLES, hr);
+			ICoreWebView2CookieList cookieList = new ICoreWebView2CookieList(ppv[0]);
+
+			int[] count = new int[1];
+			cookieList.get_Count(count);
+			for (int i = 0; i < count[0]; i++) {
+				hr = cookieList.GetValueAtIndex(i, ppv);
+				if (hr != COM.S_OK) error(SWT.ERROR_NO_HANDLES, hr);
+				ICoreWebView2Cookie cookie = new ICoreWebView2Cookie(ppv[0]);
+				cookie.get_Name(ppv);
+				String name = wstrToString(ppv[0], true);
+				if (CookieName.equals(name)) {
+					cookie.get_Value(ppv);
+					CookieValue = wstrToString(ppv[0], true);
+				}
+				cookie.Release();
+				if (CookieValue != null) {
+					break;
+				}
+			}
+			cookieList.Release();
+			manager.Release();
+		};
+
+		NativeSetCookie = () -> {
+			HttpCookie parser = HttpCookie.parse(CookieValue).get(0);
+			URL origin;
+			try {
+				origin = new URL(CookieUrl);
+			} catch (MalformedURLException e) {
+				return;
+			}
+			if (parser.getDomain() == null) {
+				parser.setDomain(origin.getHost());
+			}
+			if (parser.getPath() == null) {
+				parser.setPath(origin.getPath());
+			}
+
+			ICoreWebView2CookieManager manager = getCookieManager();
+			if (manager == null) return;
+
+			char[] name = stringToWstr(parser.getName());
+			char[] value = stringToWstr(parser.getValue());
+			char[] domain = stringToWstr(parser.getDomain());
+			char[] path = stringToWstr(parser.getPath());
+			long[] ppv = new long[1];
+			int hr = manager.CreateCookie(name, value, domain, path, ppv);
+			if (hr != COM.S_OK) {
+				manager.Release();
+				return;
+			}
+			ICoreWebView2Cookie cookie = new ICoreWebView2Cookie(ppv[0]);
+
+			if (parser.getMaxAge() != -1) {
+				cookie.put_Expires(Instant.now().getEpochSecond() + parser.getMaxAge());
+			}
+			cookie.put_IsSecure(parser.getSecure());
+			cookie.put_IsHttpOnly(parser.isHttpOnly());
+			hr = manager.AddOrUpdateCookie(cookie);
+			cookie.Release();
+			manager.Release();
+
+			CookieResult = hr >= COM.S_OK;
+		};
+	}
+
 static String wstrToString(long psz, boolean free) {
 	if (psz == 0) return "";
 	int len = OS.wcslen(psz);
@@ -138,6 +248,21 @@
 	return phr[0];
 }
 
+static ICoreWebView2CookieManager getCookieManager() {
+	if (Instances.isEmpty()) {
+		SWT.error(SWT.ERROR_NOT_IMPLEMENTED, null, " [WebView2: cookie access requires a Browser instance]");
+	}
+	Edge instance = Instances.get(0);
+	if (instance.webView_2 == null) {
+		SWT.error(SWT.ERROR_NOT_IMPLEMENTED, null, " [WebView2 version 88+ is required to access cookies]");
+	}
+
+	long[] ppv = new long[1];
+	int hr = instance.webView_2.get_CookieManager(ppv);
+	if (hr != COM.S_OK) error(SWT.ERROR_NO_HANDLES, hr);
+	return new ICoreWebView2CookieManager(ppv[0]);
+}
+
 void checkDeadlock() {
 	// Feature in WebView2. All event handlers, completion handlers
 	// and JavaScript callbacks are serialized. An event handler waiting
@@ -269,9 +394,13 @@
 	browser.addListener(SWT.FocusIn, this::browserFocusIn);
 	browser.addListener(SWT.Resize, this::browserResize);
 	browser.addListener(SWT.Move, this::browserMove);
+
+	Instances.add(this);
 }
 
 void browserDispose(Event event) {
+	Instances.remove(this);
+
 	if (webView_2 != null) webView_2.Release();
 	if (environment2 != null) environment2.Release();
 	settings.Release();
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com.c
index fbc0057..a6caa69 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com.c
@@ -1085,19 +1085,31 @@
 {
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_FUNC);
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong))(*(jlong **)arg1)[arg0])(arg1);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong))(*(jlong **)arg1)[arg0])(arg1);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJ_FUNC);
 	return rc;
 }
 #endif
 
+#ifndef NO_VtblCall__IJD
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJD)
+	(JNIEnv *env, jclass that, jint arg0, jlong arg1, jdouble arg2)
+{
+	jint rc = 0;
+	COM_NATIVE_ENTER(env, that, VtblCall__IJD_FUNC);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jdouble))(*(jlong **)arg1)[arg0])(arg1, arg2);
+	COM_NATIVE_EXIT(env, that, VtblCall__IJD_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_VtblCall__IJI
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJI)
 	(JNIEnv *env, jclass that, jint arg0, jlong arg1, jint arg2)
 {
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJI_FUNC);
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint))(*(jlong **)arg1)[arg0])(arg1, arg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJI_FUNC);
 	return rc;
 }
@@ -1113,7 +1125,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJIIILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2JLorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2J_FUNC);
 	if (arg5) if ((lparg5 = getDISPPARAMSFields(env, arg5, &_arg5)) == NULL) goto fail;
 	if (arg7) if ((lparg7 = getEXCEPINFOFields(env, arg7, &_arg7)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong, DISPPARAMS *, jintLong, EXCEPINFO *, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5, arg6, lparg7, arg8);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jint, jint, DISPPARAMS *, jlong, EXCEPINFO *, jlong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5, arg6, lparg7, arg8);
 fail:
 	if (arg7 && lparg7) setEXCEPINFOFields(env, arg7, lparg7);
 	if (arg5 && lparg5) setDISPPARAMSFields(env, arg5, lparg5);
@@ -1130,7 +1142,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJIIJLorg_eclipse_swt_internal_win32_SIZE_2_FUNC);
 	if (arg5) if ((lparg5 = getSIZEFields(env, arg5, &_arg5)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong, SIZE *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jint, jlong, SIZE *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5);
 fail:
 	if (arg5 && lparg5) setSIZEFields(env, arg5, lparg5);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJIIJLorg_eclipse_swt_internal_win32_SIZE_2_FUNC);
@@ -1144,7 +1156,7 @@
 {
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJIJ_FUNC);
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jlong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJIJ_FUNC);
 	return rc;
 }
@@ -1158,7 +1170,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJIJI_3J_FUNC);
 	if (arg5) if ((lparg5 = (*env)->GetLongArrayElements(env, arg5, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jlong, jint, jlong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5);
 fail:
 	if (arg5 && lparg5) (*env)->ReleaseLongArrayElements(env, arg5, lparg5, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJIJI_3J_FUNC);
@@ -1172,7 +1184,7 @@
 {
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJIJJ_FUNC);
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jlong, jlong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJIJJ_FUNC);
 	return rc;
 }
@@ -1186,7 +1198,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJIJ_3I_FUNC);
 	if (arg4) if ((lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jlong, jint *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4);
 fail:
 	if (arg4 && lparg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJIJ_3I_FUNC);
@@ -1202,7 +1214,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJILorg_eclipse_swt_internal_ole_win32_GUID_2_FUNC);
 	if (arg3) if ((lparg3 = getGUIDFields(env, arg3, &_arg3)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, GUID *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, GUID *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
 fail:
 	if (arg3 && lparg3) setGUIDFields(env, arg3, lparg3);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJILorg_eclipse_swt_internal_ole_win32_GUID_2_FUNC);
@@ -1224,7 +1236,7 @@
 	if (arg6) if ((lparg6 = getDISPPARAMSFields(env, arg6, &_arg6)) == NULL) goto fail;
 	if (arg8) if ((lparg8 = getEXCEPINFOFields(env, arg8, &_arg8)) == NULL) goto fail;
 	if (arg9) if ((lparg9 = (*env)->GetIntArrayElements(env, arg9, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, GUID *, jintLong, jintLong, DISPPARAMS *, jintLong, EXCEPINFO *, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4, arg5, lparg6, arg7, lparg8, lparg9);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, GUID *, jint, jint, DISPPARAMS *, jlong, EXCEPINFO *, jint *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4, arg5, lparg6, arg7, lparg8, lparg9);
 fail:
 	if (arg9 && lparg9) (*env)->ReleaseIntArrayElements(env, arg9, lparg9, 0);
 	if (arg8 && lparg8) setEXCEPINFOFields(env, arg8, lparg8);
@@ -1243,7 +1255,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJILorg_eclipse_swt_internal_ole_win32_GUID_2JJ_FUNC);
 	if (arg3) if ((lparg3 = getGUIDFields(env, arg3, &_arg3)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, GUID *, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4, arg5);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, GUID *, jlong, jlong))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4, arg5);
 fail:
 	if (arg3 && lparg3) setGUIDFields(env, arg3, lparg3);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJILorg_eclipse_swt_internal_ole_win32_GUID_2JJ_FUNC);
@@ -1263,7 +1275,7 @@
 	if (arg3) if ((lparg3 = getGUIDFields(env, arg3, &_arg3)) == NULL) goto fail;
 	if (arg4) if ((lparg4 = getGUIDFields(env, arg4, &_arg4)) == NULL) goto fail;
 	if (arg5) if ((lparg5 = getGUIDFields(env, arg5, &_arg5)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, GUID *, GUID *, GUID *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, lparg4, lparg5);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, GUID *, GUID *, GUID *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, lparg4, lparg5);
 fail:
 	if (arg5 && lparg5) setGUIDFields(env, arg5, lparg5);
 	if (arg4 && lparg4) setGUIDFields(env, arg4, lparg4);
@@ -1283,7 +1295,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJILorg_eclipse_swt_internal_win32_MSG_2JIJLorg_eclipse_swt_internal_win32_RECT_2_FUNC);
 	if (arg3) if ((lparg3 = getMSGFields(env, arg3, &_arg3)) == NULL) goto fail;
 	if (arg7) if ((lparg7 = getRECTFields(env, arg7, &_arg7)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, MSG *, jintLong, jintLong, jintLong, RECT *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4, arg5, arg6, lparg7);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, MSG *, jlong, jint, jlong, RECT *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4, arg5, arg6, lparg7);
 fail:
 	if (arg7 && lparg7) setRECTFields(env, arg7, lparg7);
 	if (arg3 && lparg3) setMSGFields(env, arg3, lparg3);
@@ -1300,7 +1312,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJILorg_eclipse_swt_internal_win32_SIZE_2_FUNC);
 	if (arg3) if ((lparg3 = getSIZEFields(env, arg3, &_arg3)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, SIZE *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, SIZE *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
 fail:
 	if (arg3 && lparg3) setSIZEFields(env, arg3, lparg3);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJILorg_eclipse_swt_internal_win32_SIZE_2_FUNC);
@@ -1316,7 +1328,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJI_3I_FUNC);
 	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jint *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
 fail:
 	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJI_3I_FUNC);
@@ -1332,7 +1344,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJI_3J_FUNC);
 	if (arg3) if ((lparg3 = (*env)->GetLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jlong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
 fail:
 	if (arg3 && lparg3) (*env)->ReleaseLongArrayElements(env, arg3, lparg3, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJI_3J_FUNC);
@@ -1350,7 +1362,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJI_3JI_3I_FUNC);
 	if (arg3) if ((lparg3 = (*env)->GetLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
 	if (arg5) if ((lparg5 = (*env)->GetIntArrayElements(env, arg5, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong *, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4, lparg5);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jlong *, jint, jint *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4, lparg5);
 fail:
 	if (arg5 && lparg5) (*env)->ReleaseIntArrayElements(env, arg5, lparg5, 0);
 	if (arg3 && lparg3) (*env)->ReleaseLongArrayElements(env, arg3, lparg3, 0);
@@ -1369,7 +1381,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJI_3J_3I_FUNC);
 	if (arg3) if ((lparg3 = (*env)->GetLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
 	if (arg4) if ((lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong *, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, lparg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jlong *, jint *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, lparg4);
 fail:
 	if (arg4 && lparg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
 	if (arg3 && lparg3) (*env)->ReleaseLongArrayElements(env, arg3, lparg3, 0);
@@ -1392,7 +1404,7 @@
 	if (arg4) if ((lparg4 = (*env)->GetLongArrayElements(env, arg4, NULL)) == NULL) goto fail;
 	if (arg5) if ((lparg5 = (*env)->GetIntArrayElements(env, arg5, NULL)) == NULL) goto fail;
 	if (arg6) if ((lparg6 = (*env)->GetLongArrayElements(env, arg6, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong *, jintLong *, jintLong *, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, lparg4, lparg5, lparg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint, jlong *, jlong *, jint *, jlong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, lparg4, lparg5, lparg6);
 fail:
 	if (arg6 && lparg6) (*env)->ReleaseLongArrayElements(env, arg6, lparg6, 0);
 	if (arg5 && lparg5) (*env)->ReleaseIntArrayElements(env, arg5, lparg5, 0);
@@ -1409,7 +1421,7 @@
 {
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJ_FUNC);
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong))(*(jlong **)arg1)[arg0])(arg1, arg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJ_FUNC);
 	return rc;
 }
@@ -1421,7 +1433,7 @@
 {
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJI_FUNC);
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jint))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJI_FUNC);
 	return rc;
 }
@@ -1435,7 +1447,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJII_3J_FUNC);
 	if (arg5) if ((lparg5 = (*env)->GetLongArrayElements(env, arg5, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jint, jint, jlong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5);
 fail:
 	if (arg5 && lparg5) (*env)->ReleaseLongArrayElements(env, arg5, lparg5, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJII_3J_FUNC);
@@ -1451,7 +1463,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJI_3I_FUNC);
 	if (arg4) if ((lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jint, jint *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4);
 fail:
 	if (arg4 && lparg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJI_3I_FUNC);
@@ -1467,7 +1479,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJI_3J_FUNC);
 	if (arg4) if ((lparg4 = (*env)->GetLongArrayElements(env, arg4, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jint, jlong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4);
 fail:
 	if (arg4 && lparg4) (*env)->ReleaseLongArrayElements(env, arg4, lparg4, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJI_3J_FUNC);
@@ -1481,7 +1493,7 @@
 {
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJJ_FUNC);
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jlong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJJ_FUNC);
 	return rc;
 }
@@ -1495,7 +1507,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJJI_3J_FUNC);
 	if (arg5) if ((lparg5 = (*env)->GetLongArrayElements(env, arg5, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jlong, jint, jlong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5);
 fail:
 	if (arg5 && lparg5) (*env)->ReleaseLongArrayElements(env, arg5, lparg5, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJJI_3J_FUNC);
@@ -1509,7 +1521,7 @@
 {
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJJJ_FUNC);
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jlong, jlong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJJJ_FUNC);
 	return rc;
 }
@@ -1521,7 +1533,7 @@
 {
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJJJJJ_FUNC);
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, arg5, arg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jlong, jlong, jlong, jlong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, arg4, arg5, arg6);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJJJJJ_FUNC);
 	return rc;
 }
@@ -1537,7 +1549,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJJLorg_eclipse_swt_internal_ole_win32_GUID_2J_3J_FUNC);
 	if (arg4) if ((lparg4 = getGUIDFields(env, arg4, &_arg4)) == NULL) goto fail;
 	if (arg6) if ((lparg6 = (*env)->GetLongArrayElements(env, arg6, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, GUID *, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4, arg5, lparg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jlong, GUID *, jlong, jlong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4, arg5, lparg6);
 fail:
 	if (arg6 && lparg6) (*env)->ReleaseLongArrayElements(env, arg6, lparg6, 0);
 	if (arg4 && lparg4) setGUIDFields(env, arg4, lparg4);
@@ -1554,7 +1566,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJJLorg_eclipse_swt_internal_win32_POINT_2I_FUNC);
 	if (arg4) if ((lparg4 = getPOINTFields(env, arg4, &_arg4)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, POINT *, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4, arg5);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jlong, POINT *, jint))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4, arg5);
 fail:
 	if (arg4 && lparg4) setPOINTFields(env, arg4, lparg4);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJJLorg_eclipse_swt_internal_win32_POINT_2I_FUNC);
@@ -1570,7 +1582,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJJ_3J_FUNC);
 	if (arg4) if ((lparg4 = (*env)->GetLongArrayElements(env, arg4, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jlong, jlong *))(*(jlong **)arg1)[arg0])(arg1, arg2, arg3, lparg4);
 fail:
 	if (arg4 && lparg4) (*env)->ReleaseLongArrayElements(env, arg4, lparg4, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJJ_3J_FUNC);
@@ -1586,7 +1598,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJLorg_eclipse_swt_internal_win32_POINT_2J_FUNC);
 	if (arg3) if ((lparg3 = getPOINTFields(env, arg3, &_arg3)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, POINT *, jintLong))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, POINT *, jlong))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3, arg4);
 fail:
 	if (arg3 && lparg3) setPOINTFields(env, arg3, lparg3);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJLorg_eclipse_swt_internal_win32_POINT_2J_FUNC);
@@ -1602,7 +1614,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJ_3I_FUNC);
 	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jint *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
 fail:
 	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJ_3I_FUNC);
@@ -1618,7 +1630,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJJ_3J_FUNC);
 	if (arg3) if ((lparg3 = (*env)->GetLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong, jlong *))(*(jlong **)arg1)[arg0])(arg1, arg2, lparg3);
 fail:
 	if (arg3 && lparg3) (*env)->ReleaseLongArrayElements(env, arg3, lparg3, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJJ_3J_FUNC);
@@ -1634,7 +1646,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_CAUUID_2_FUNC);
 	if (arg2) if ((lparg2 = getCAUUIDFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, CAUUID *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, CAUUID *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) setCAUUIDFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_CAUUID_2_FUNC);
@@ -1650,7 +1662,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_CONTROLINFO_2_FUNC);
 	if (arg2) if ((lparg2 = getCONTROLINFOFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, CONTROLINFO *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, CONTROLINFO *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) setCONTROLINFOFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_CONTROLINFO_2_FUNC);
@@ -1666,7 +1678,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2_FUNC);
 	if (arg2) if ((lparg2 = getFORMATETCFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, FORMATETC *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, FORMATETC *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) setFORMATETCFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2_FUNC);
@@ -1684,7 +1696,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2_FUNC);
 	if (arg2) if ((lparg2 = getFORMATETCFields(env, arg2, &_arg2)) == NULL) goto fail;
 	if (arg3) if ((lparg3 = getSTGMEDIUMFields(env, arg3, &_arg3)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, FORMATETC *, STGMEDIUM *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, FORMATETC *, STGMEDIUM *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
 fail:
 	if (arg3 && lparg3) setSTGMEDIUMFields(env, arg3, lparg3);
 	if (arg2 && lparg2) setFORMATETCFields(env, arg2, lparg2);
@@ -1701,7 +1713,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_GUID_2_FUNC);
 	if (arg2) if ((lparg2 = getGUIDFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, GUID *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, GUID *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) setGUIDFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_GUID_2_FUNC);
@@ -1717,7 +1729,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_GUID_2IIJJ_FUNC);
 	if (arg2) if ((lparg2 = getGUIDFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, GUID *, jintLong, jintLong, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, arg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, GUID *, jint, jint, jlong, jlong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, arg6);
 fail:
 	if (arg2 && lparg2) setGUIDFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_GUID_2IIJJ_FUNC);
@@ -1735,7 +1747,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_GUID_2ILorg_eclipse_swt_internal_ole_win32_OLECMD_2J_FUNC);
 	if (arg2) if ((lparg2 = getGUIDFields(env, arg2, &_arg2)) == NULL) goto fail;
 	if (arg4) if ((lparg4 = getOLECMDFields(env, arg4, &_arg4)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, GUID *, jintLong, OLECMD *, jintLong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, lparg4, arg5);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, GUID *, jint, OLECMD *, jlong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, lparg4, arg5);
 fail:
 	if (arg4 && lparg4) setOLECMDFields(env, arg4, lparg4);
 	if (arg2 && lparg2) setGUIDFields(env, arg2, lparg2);
@@ -1754,7 +1766,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_GUID_2JII_3I_FUNC);
 	if (arg2) if ((lparg2 = getGUIDFields(env, arg2, &_arg2)) == NULL) goto fail;
 	if (arg6) if ((lparg6 = (*env)->GetIntArrayElements(env, arg6, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, GUID *, jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, lparg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, GUID *, jlong, jint, jint, jint *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, lparg6);
 fail:
 	if (arg6 && lparg6) (*env)->ReleaseIntArrayElements(env, arg6, lparg6, 0);
 	if (arg2 && lparg2) setGUIDFields(env, arg2, lparg2);
@@ -1775,7 +1787,7 @@
 	if (arg2) if ((lparg2 = getGUIDFields(env, arg2, &_arg2)) == NULL) goto fail;
 	if (arg3) if ((lparg3 = getGUIDFields(env, arg3, &_arg3)) == NULL) goto fail;
 	if (arg4) if ((lparg4 = (*env)->GetLongArrayElements(env, arg4, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, GUID *, GUID *, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3, lparg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, GUID *, GUID *, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3, lparg4);
 fail:
 	if (arg4 && lparg4) (*env)->ReleaseLongArrayElements(env, arg4, lparg4, 0);
 	if (arg3 && lparg3) setGUIDFields(env, arg3, lparg3);
@@ -1795,7 +1807,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_GUID_2_3J_FUNC);
 	if (arg2) if ((lparg2 = getGUIDFields(env, arg2, &_arg2)) == NULL) goto fail;
 	if (arg3) if ((lparg3 = (*env)->GetLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, GUID *, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, GUID *, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
 fail:
 	if (arg3 && lparg3) (*env)->ReleaseLongArrayElements(env, arg3, lparg3, 0);
 	if (arg2 && lparg2) setGUIDFields(env, arg2, lparg2);
@@ -1812,7 +1824,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_LICINFO_2_FUNC);
 	if (arg2) if ((lparg2 = getLICINFOFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, LICINFO *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, LICINFO *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) setLICINFOFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_ole_win32_LICINFO_2_FUNC);
@@ -1828,7 +1840,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_MSG_2_FUNC);
 	if (arg2) if ((lparg2 = getMSGFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, MSG *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, MSG *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) setMSGFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_MSG_2_FUNC);
@@ -1844,7 +1856,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_POINT_2I_FUNC);
 	if (arg2) if ((lparg2 = getPOINTFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, POINT *, jintLong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, POINT *, jint))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3);
 fail:
 	if (arg2 && lparg2) setPOINTFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_POINT_2I_FUNC);
@@ -1860,7 +1872,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_PROPERTYKEY_2J_FUNC);
 	if (arg2) if ((lparg2 = getPROPERTYKEYFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, PROPERTYKEY *, jintLong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, PROPERTYKEY *, jlong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3);
 fail:
 	if (arg2 && lparg2) setPROPERTYKEYFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_PROPERTYKEY_2J_FUNC);
@@ -1876,7 +1888,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2_FUNC);
 	if (arg2) if ((lparg2 = getRECTFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, RECT *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, RECT *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) setRECTFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2_FUNC);
@@ -1892,7 +1904,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JI_FUNC);
 	if (arg2) if ((lparg2 = getRECTFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, RECT *, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, RECT *, jlong, jint))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4);
 fail:
 	if (arg2 && lparg2) setRECTFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JI_FUNC);
@@ -1908,7 +1920,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JJ_FUNC);
 	if (arg2) if ((lparg2 = getRECTFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, RECT, jintLong, jintLong))(*(jlong **)arg1)[arg0])(arg1, *lparg2, arg3, arg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, RECT, jlong, jlong))(*(jlong **)arg1)[arg0])(arg1, *lparg2, arg3, arg4);
 fail:
 	if (arg2 && lparg2) setRECTFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JJ_FUNC);
@@ -1926,7 +1938,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2Lorg_eclipse_swt_internal_win32_RECT_2_FUNC);
 	if (arg2) if ((lparg2 = getRECTFields(env, arg2, &_arg2)) == NULL) goto fail;
 	if (arg3) if ((lparg3 = getRECTFields(env, arg3, &_arg3)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, RECT *, RECT *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, RECT *, RECT *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
 fail:
 	if (arg3 && lparg3) setRECTFields(env, arg3, lparg3);
 	if (arg2 && lparg2) setRECTFields(env, arg2, lparg2);
@@ -1943,7 +1955,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_TF_1DISPLAYATTRIBUTE_2_FUNC);
 	if (arg2) if ((lparg2 = getTF_DISPLAYATTRIBUTEFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, TF_DISPLAYATTRIBUTE *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, TF_DISPLAYATTRIBUTE *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) setTF_DISPLAYATTRIBUTEFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_TF_1DISPLAYATTRIBUTE_2_FUNC);
@@ -1959,7 +1971,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3C_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJ_3C_FUNC);
@@ -1975,7 +1987,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3CI_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jintLong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jint))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3);
 fail:
 	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJ_3CI_FUNC);
@@ -1993,7 +2005,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3CIII_3J_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
 	if (arg6) if ((lparg6 = (*env)->GetLongArrayElements(env, arg6, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, lparg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jint, jint, jint, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, lparg6);
 fail:
 	if (arg6 && lparg6) (*env)->ReleaseLongArrayElements(env, arg6, lparg6, 0);
 	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
@@ -2014,7 +2026,7 @@
 	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
 	if (arg5) if ((lparg5 = (*env)->GetIntArrayElements(env, arg5, NULL)) == NULL) goto fail;
 	if (arg6) if ((lparg6 = (*env)->GetIntArrayElements(env, arg6, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jintLong, jintLong, jintLong *, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, lparg5, lparg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jint, jint, jint *, jint *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, lparg5, lparg6);
 fail:
 	if (arg6 && lparg6) (*env)->ReleaseIntArrayElements(env, arg6, lparg6, 0);
 	if (arg5 && lparg5) (*env)->ReleaseIntArrayElements(env, arg5, lparg5, 0);
@@ -2032,7 +2044,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3CJ_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jintLong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jlong))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3);
 fail:
 	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJ_3CJ_FUNC);
@@ -2050,7 +2062,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3CJIII_3J_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
 	if (arg7) if ((lparg7 = (*env)->GetLongArrayElements(env, arg7, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jintLong, jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, arg6, lparg7);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jlong, jint, jint, jint, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, arg6, lparg7);
 fail:
 	if (arg7 && lparg7) (*env)->ReleaseLongArrayElements(env, arg7, lparg7, 0);
 	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
@@ -2069,7 +2081,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3CJII_3J_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
 	if (arg6) if ((lparg6 = (*env)->GetLongArrayElements(env, arg6, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jintLong, jintLong, jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, lparg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jlong, jint, jint, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, arg3, arg4, arg5, lparg6);
 fail:
 	if (arg6 && lparg6) (*env)->ReleaseLongArrayElements(env, arg6, lparg6, 0);
 	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
@@ -2088,7 +2100,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3C_3C_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
 	if (arg3) if ((lparg3 = (*env)->GetCharArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jchar *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jchar *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
 fail:
 	if (arg3 && lparg3) (*env)->ReleaseCharArrayElements(env, arg3, lparg3, 0);
 	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
@@ -2111,7 +2123,7 @@
 	if (arg3) if ((lparg3 = (*env)->GetCharArrayElements(env, arg3, NULL)) == NULL) goto fail;
 	if (arg5) if ((lparg5 = (*env)->GetCharArrayElements(env, arg5, NULL)) == NULL) goto fail;
 	if (arg6) if ((lparg6 = (*env)->GetLongArrayElements(env, arg6, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jchar *, jintLong, jchar *, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3, arg4, lparg5, lparg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jchar *, jlong, jchar *, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3, arg4, lparg5, lparg6);
 fail:
 	if (arg6 && lparg6) (*env)->ReleaseLongArrayElements(env, arg6, lparg6, 0);
 	if (arg5 && lparg5) (*env)->ReleaseCharArrayElements(env, arg5, lparg5, 0);
@@ -2122,6 +2134,34 @@
 }
 #endif
 
+#ifndef NO_VtblCall__IJ_3C_3C_3C_3C_3J
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJ_3C_3C_3C_3C_3J)
+	(JNIEnv *env, jclass that, jint arg0, jlong arg1, jcharArray arg2, jcharArray arg3, jcharArray arg4, jcharArray arg5, jlongArray arg6)
+{
+	jchar *lparg2=NULL;
+	jchar *lparg3=NULL;
+	jchar *lparg4=NULL;
+	jchar *lparg5=NULL;
+	jlong *lparg6=NULL;
+	jint rc = 0;
+	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3C_3C_3C_3C_3J_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = (*env)->GetCharArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = (*env)->GetCharArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	if (arg5) if ((lparg5 = (*env)->GetCharArrayElements(env, arg5, NULL)) == NULL) goto fail;
+	if (arg6) if ((lparg6 = (*env)->GetLongArrayElements(env, arg6, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jchar *, jchar *, jchar *, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3, lparg4, lparg5, lparg6);
+fail:
+	if (arg6 && lparg6) (*env)->ReleaseLongArrayElements(env, arg6, lparg6, 0);
+	if (arg5 && lparg5) (*env)->ReleaseCharArrayElements(env, arg5, lparg5, 0);
+	if (arg4 && lparg4) (*env)->ReleaseCharArrayElements(env, arg4, lparg4, 0);
+	if (arg3 && lparg3) (*env)->ReleaseCharArrayElements(env, arg3, lparg3, 0);
+	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
+	COM_NATIVE_EXIT(env, that, VtblCall__IJ_3C_3C_3C_3C_3J_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_VtblCall__IJ_3C_3J
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJ_3C_3J)
 	(JNIEnv *env, jclass that, jint arg0, jlong arg1, jcharArray arg2, jlongArray arg3)
@@ -2132,7 +2172,7 @@
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3C_3J_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
 	if (arg3) if ((lparg3 = (*env)->GetLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jchar *, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3);
 fail:
 	if (arg3 && lparg3) (*env)->ReleaseLongArrayElements(env, arg3, lparg3, 0);
 	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
@@ -2149,7 +2189,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3I_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJ_3I_FUNC);
@@ -2169,7 +2209,7 @@
 	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
 	if (arg3) if ((lparg3 = getGUIDFields(env, arg3, &_arg3)) == NULL) goto fail;
 	if (arg4) if ((lparg4 = (*env)->GetLongArrayElements(env, arg4, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong *, GUID *, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3, lparg4);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jint *, GUID *, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2, lparg3, lparg4);
 fail:
 	if (arg4 && lparg4) (*env)->ReleaseLongArrayElements(env, arg4, lparg4, 0);
 	if (arg3 && lparg3) setGUIDFields(env, arg3, lparg3);
@@ -2187,7 +2227,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3J_FUNC);
 	if (arg2) if ((lparg2 = (*env)->GetLongArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, jlong *))(*(jlong **)arg1)[arg0])(arg1, lparg2);
 fail:
 	if (arg2 && lparg2) (*env)->ReleaseLongArrayElements(env, arg2, lparg2, 0);
 	COM_NATIVE_EXIT(env, that, VtblCall__IJ_3J_FUNC);
@@ -2203,7 +2243,7 @@
 	jint rc = 0;
 	COM_NATIVE_ENTER(env, that, VtblCall_1put_1Bounds_FUNC);
 	if (arg2) if ((lparg2 = getRECTFields(env, arg2, &_arg2)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, RECT))(*(jlong **)arg1)[arg0])(arg1, *lparg2);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jlong, RECT))(*(jlong **)arg1)[arg0])(arg1, *lparg2);
 fail:
 	if (arg2 && lparg2) setRECTFields(env, arg2, lparg2);
 	COM_NATIVE_EXIT(env, that, VtblCall_1put_1Bounds_FUNC);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.c
index 4e2eff7..fe93cff 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2020 IBM Corporation and others.
+ * Copyright (c) 2000, 2021 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -98,6 +98,7 @@
 	"VariantClear",
 	"VariantInit",
 	"VtblCall__IJ",
+	"VtblCall__IJD",
 	"VtblCall__IJI",
 	"VtblCall__IJIIILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2JLorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2J",
 	"VtblCall__IJIIJLorg_eclipse_swt_internal_win32_SIZE_2",
@@ -159,6 +160,7 @@
 	"VtblCall__IJ_3CJII_3J",
 	"VtblCall__IJ_3C_3C",
 	"VtblCall__IJ_3C_3CJ_3C_3J",
+	"VtblCall__IJ_3C_3C_3C_3C_3J",
 	"VtblCall__IJ_3C_3J",
 	"VtblCall__IJ_3I",
 	"VtblCall__IJ_3ILorg_eclipse_swt_internal_ole_win32_GUID_2_3J",
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.h
index b21f35a..8f1e7e0 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.h
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2020 IBM Corporation and others.
+ * Copyright (c) 2000, 2021 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -108,6 +108,7 @@
 	VariantClear_FUNC,
 	VariantInit_FUNC,
 	VtblCall__IJ_FUNC,
+	VtblCall__IJD_FUNC,
 	VtblCall__IJI_FUNC,
 	VtblCall__IJIIILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2JLorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2J_FUNC,
 	VtblCall__IJIIJLorg_eclipse_swt_internal_win32_SIZE_2_FUNC,
@@ -169,6 +170,7 @@
 	VtblCall__IJ_3CJII_3J_FUNC,
 	VtblCall__IJ_3C_3C_FUNC,
 	VtblCall__IJ_3C_3CJ_3C_3J_FUNC,
+	VtblCall__IJ_3C_3C_3C_3C_3J_FUNC,
 	VtblCall__IJ_3C_3J_FUNC,
 	VtblCall__IJ_3I_FUNC,
 	VtblCall__IJ_3ILorg_eclipse_swt_internal_ole_win32_GUID_2_3J_FUNC,
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/COM.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/COM.java
index df5a7af..2dd789b 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/COM.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/COM.java
@@ -576,6 +576,8 @@
 public static final native int VtblCall(int fnNumber, long ppVtbl, int arg0, long[] arg1, long[] arg2, int[] arg3, long[] arg4);
 public static final native int VtblCall(int fnNumber, long ppVtbl, int arg0, long[] arg1, int arg2, int[] arg3);
 public static final native int VtblCall(int fnNumber, long ppVtbl, int arg0, int arg1, int arg2, DISPPARAMS arg3, long arg4, EXCEPINFO arg5, long arg6);
+public static final native int VtblCall(int fnNumber, long address, char[] arg0, char[] arg1, char[] arg2, char[] arg3, long[] arg4);
+public static final native int VtblCall(int fnNumber, long address, double arg0);
 
 /** @param arg0 flags=struct */
 public static final native int VtblCall(int fnNumber, long ppVtbl, RECT arg0, long arg1, long arg2);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2Cookie.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2Cookie.java
new file mode 100644
index 0000000..26536a0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2Cookie.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2021 Nikita Nemkin and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Nikita Nemkin <nikita@nemkin.ru> - initial implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.ole.win32;
+
+public class ICoreWebView2Cookie extends IUnknown {
+
+public ICoreWebView2Cookie(long address) {
+	super(address);
+}
+
+public int get_Name(long[] name) {
+	return COM.VtblCall(3, address, name);
+}
+
+public int get_Value(long[] value) {
+	return COM.VtblCall(4, address, value);
+}
+
+public int put_Value(char[] value) {
+	return COM.VtblCall(5, address, value);
+}
+
+public int put_Expires(double expires) {
+	return COM.VtblCall(9, address, expires);
+}
+
+public int put_IsHttpOnly(boolean isHttpOnly) {
+	return COM.VtblCall(11, address, isHttpOnly ? 1 : 0);
+}
+
+public int put_IsSecure(boolean isSecure) {
+	return COM.VtblCall(15, address, isSecure ? 1 : 0);
+}
+
+public int get_IsSession(int[] isSession) {
+	return COM.VtblCall(16, address, isSession);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2CookieList.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2CookieList.java
new file mode 100644
index 0000000..cc96768
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2CookieList.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2021 Nikita Nemkin and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Nikita Nemkin <nikita@nemkin.ru> - initial implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.ole.win32;
+
+public class ICoreWebView2CookieList extends IUnknown {
+
+public ICoreWebView2CookieList(long address) {
+	super(address);
+}
+
+public int get_Count(int[] count) {
+	return COM.VtblCall(3, address, count);
+}
+
+public int GetValueAtIndex(int index, long[] cookie) {
+	return COM.VtblCall(4, address, index, cookie);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2CookieManager.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2CookieManager.java
new file mode 100644
index 0000000..b37e2ab
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2CookieManager.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2021 Nikita Nemkin and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Nikita Nemkin <nikita@nemkin.ru> - initial implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.ole.win32;
+
+public class ICoreWebView2CookieManager extends IUnknown {
+
+public ICoreWebView2CookieManager(long address) {
+	super(address);
+}
+
+public int CreateCookie(char[] name, char[] value, char[] domain, char[] path, long[] cookie) {
+	return COM.VtblCall(3, address, name, value, domain, path, cookie);
+}
+
+public int GetCookies(char[] uri, IUnknown handler) {
+	return COM.VtblCall(5, address, uri, handler.getAddress());
+}
+
+public int AddOrUpdateCookie(ICoreWebView2Cookie cookie) {
+	return COM.VtblCall(6, address, cookie.getAddress());
+}
+
+public int DeleteCookie(ICoreWebView2Cookie cookie) {
+	return COM.VtblCall(7, address, cookie.getAddress());
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2_2.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2_2.java
index 6945ff4..1050bb8 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2_2.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/ICoreWebView2_2.java
@@ -27,4 +27,8 @@
 	return COM.VtblCall(64, address, handler.getAddress(), token);
 }
 
+public int get_CookieManager(long[] cookieManager) {
+	return COM.VtblCall(66, address, cookieManager);
+}
+
 }