NOT PART OF BUILD. More work on LiveConnect. It actually works now(!) but is a bit crashy for some undetermined reason.

This commit is contained in:
locka%iol.ie 2002-05-07 21:54:29 +00:00
Родитель 6d97942a45
Коммит 574ffb901e
4 изменённых файлов: 157 добавлений и 87 удалений

Просмотреть файл

@ -43,9 +43,9 @@
#include "nsISupports.h"
#ifdef MOZ_ACTIVEX_PLUGIN_LIVECONNECT
#define IMPLEMENT_MozAxPlugin
#include "_gen/java_lang_String.h"
#include "_gen/netscape_plugin_Plugin.h"
#include "_gen/MozAxPlugin.h"
//#include "_gen/netscape_plugin_Plugin.h"
#endif
#ifdef MOZ_ACTIVEX_PLUGIN_XPCONNECT
@ -97,8 +97,9 @@ void NPP_Shutdown(void)
#ifdef MOZ_ACTIVEX_PLUGIN_LIVECONNECT
JRIEnv* env = NPN_GetJavaEnv();
if (env) {
// unuse_MozAxPlugin(env);
unregister_MozAxPlugin(env);
unuse_MozAxPlugin(env);
unuse_netscape_plugin_Plugin(env);
// unuse_java_lang_String(env);
}
#endif
@ -116,8 +117,10 @@ jref NPP_GetJavaClass(void)
#ifdef MOZ_ACTIVEX_PLUGIN_LIVECONNECT
JRIEnv* env = NPN_GetJavaEnv();
if (env) {
return (jref) register_MozAxPlugin(env);
// return (jref) use_MozAxPlugin(env);
// use_java_lang_String(env);
use_netscape_plugin_Plugin(env);
jref myClass = (jref) use_MozAxPlugin(env);
return myClass;
}
#endif
return NULL;
@ -1103,7 +1106,7 @@ _GetIDispatchFromJRI(JRIEnv *env, struct MozAxPlugin* self, IDispatch **pdisp)
}
IDispatchPtr disp = unk;
if (!disp.GetInterfacePtr() == NULL)
if (disp.GetInterfacePtr() == NULL)
{
return E_FAIL;
}
@ -1168,25 +1171,31 @@ _InvokeFromJRI(JRIEnv *env, struct MozAxPlugin* self, struct java_lang_String *f
* These are the native methods which we are implementing.
******************************************************************************/
//*** native Invoke (Ljava/lang/String;)Ljava/lang/Object; ***
JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_invoke(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a)
extern "C" JRI_PUBLIC_API(void)
native_MozAxPlugin_x(JRIEnv* env, struct MozAxPlugin* self, jint a)
{
::MessageBox(NULL, "x() called", "Result", MB_OK);
}
/*** private native xinvoke (Ljava/lang/String;)Ljava/lang/Object; ***/
extern "C" JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_xinvoke(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a)
{
return _InvokeFromJRI(env, self, a, 0, NULL);
}
//*** native Invoke (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; ***
JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_invoke_1(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b)
/*** private native xinvoke1 (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; ***/
extern "C" JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_xinvoke1(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b)
{
java_lang_Object *args[1];
args[0] = b;
return _InvokeFromJRI(env, self, a, sizeof(args) / sizeof(args[0]), args);
}
//*** native Invoke (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; ***
JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_invoke_2(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b, struct java_lang_Object *c)
/*** private native xinvoke2 (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; ***/
extern "C" JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_xinvoke2(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b, struct java_lang_Object *c)
{
java_lang_Object *args[2];
args[0] = b;
@ -1194,9 +1203,9 @@ native_MozAxPlugin_invoke_2(JRIEnv* env, struct MozAxPlugin* self, struct java_l
return _InvokeFromJRI(env, self, a, sizeof(args) / sizeof(args[0]), args);
}
//*** native Invoke (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; ***
JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_invoke_3(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b, struct java_lang_Object *c, struct java_lang_Object *d)
/*** private native xinvoke3 (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; ***/
extern "C" JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_xinvoke3(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b, struct java_lang_Object *c, struct java_lang_Object *d)
{
java_lang_Object *args[3];
args[0] = b;
@ -1205,9 +1214,9 @@ native_MozAxPlugin_invoke_3(JRIEnv* env, struct MozAxPlugin* self, struct java_l
return _InvokeFromJRI(env, self, a, sizeof(args) / sizeof(args[0]), args);
}
//*** native Invoke (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; ***
JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_invoke_4(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b, struct java_lang_Object *c, struct java_lang_Object *d, struct java_lang_Object *e)
/*** private native xinvoke4 (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; ***/
extern "C" JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_xinvoke4(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b, struct java_lang_Object *c, struct java_lang_Object *d, struct java_lang_Object *e)
{
java_lang_Object *args[4];
args[0] = b;
@ -1217,10 +1226,17 @@ native_MozAxPlugin_invoke_4(JRIEnv* env, struct MozAxPlugin* self, struct java_l
return _InvokeFromJRI(env, self, a, sizeof(args) / sizeof(args[0]), args);
}
/*** private native xinvokeX (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object; ***/
extern "C" JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_xinvokeX(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, jobjectArray b)
{
// TODO
return NULL;
}
//*** native GetProperty (Ljava/lang/String;)Ljava/lang/Object; ***
JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_getProperty(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a)
/*** private native xgetProperty (Ljava/lang/String;)Ljava/lang/Object; ***/
extern "C" JRI_PUBLIC_API(struct java_lang_Object *)
native_MozAxPlugin_xgetProperty(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a)
{
HRESULT hr;
DISPID dispid;
@ -1270,17 +1286,17 @@ native_MozAxPlugin_getProperty(JRIEnv* env, struct MozAxPlugin* self, struct jav
return NULL;
}
/*** native setProperty (Ljava/lang/String;Ljava/lang/Object;)V ***/
JRI_PUBLIC_API(void)
native_MozAxPlugin_setProperty(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b)
/*** private native xsetProperty2 (Ljava/lang/String;Ljava/lang/Object;)V ***/
extern "C" JRI_PUBLIC_API(void)
native_MozAxPlugin_xsetProperty2(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_Object *b)
{
// TODO
}
//*** public native SetProperty (Ljava/lang/String;Ljava/lang/String;)V ***
JRI_PUBLIC_API(void)
native_MozAxPlugin_setProperty_1(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_String *b)
/*** private native xsetProperty1 (Ljava/lang/String;Ljava/lang/String;)V ***/
extern "C" JRI_PUBLIC_API(void)
native_MozAxPlugin_xsetProperty1(JRIEnv* env, struct MozAxPlugin* self, struct java_lang_String *a, struct java_lang_String *b)
{
HRESULT hr;
DISPID dispid;
@ -1328,11 +1344,4 @@ native_MozAxPlugin_setProperty_1(JRIEnv* env, struct MozAxPlugin* self, struct j
}
}
#define NO_JDK
#include "_stubs/MozAxPlugin.c"
#define UNUSED_use_netscape_plugin_Plugin
#include "_stubs/netscape_plugin_Plugin.c"
#endif

Просмотреть файл

@ -1,14 +1,65 @@
import netscape.plugin.Plugin;
class MozAxPlugin extends Plugin
public class MozAxPlugin extends Plugin
{
native Object getProperty(String dispid);
native void setProperty(String dispid, String property);
native void setProperty(String dispid, Object property);
///////////////////////////////////////////////////////////////////////////
// Public methods that are exposed through LiveConnect
native Object invoke(String dispid);
native Object invoke(String dispid, Object param1);
native Object invoke(String dispid, Object param1, Object param2);
native Object invoke(String dispid, Object param1, Object param2, Object param3);
native Object invoke(String dispid, Object param1, Object param2, Object param3, Object param4);
};
public Object getProperty(String dispid)
{
return xgetProperty(dispid);
}
public void setProperty(String dispid, String property)
{
xsetProperty1(dispid, property);
}
public void setProperty(String dispid, Object property)
{
xsetProperty2(dispid, property);
}
public Object invoke(String dispid)
{
return xinvoke(dispid);
}
public Object invoke(String dispid, Object p1)
{
return xinvoke1(dispid, p1);
}
public Object invoke(String dispid, Object p1, Object p2)
{
return xinvoke2(dispid, p1, p2);
}
public Object invoke(String dispid, Object p1, Object p2, Object p3)
{
return xinvoke3(dispid, p1, p2, p3);
}
public Object invoke(String dispid, Object p1, Object p2, Object p3, Object p4)
{
return xinvoke4(dispid, p1, p2, p3, p4);
}
public Object invoke(String dispid, Object params[])
{
return xinvokeX(dispid, params);
}
///////////////////////////////////////////////////////////////////////////
// Native implementations of the above methods.
//
// Note: These methods are not overloaded like the public versions above
// because javah generates bad code which doesn't compile if you try.
// TODO remove - this is just a sanity test
public native void x(int timeout);
private native Object xgetProperty(String dispid);
private native void xsetProperty1(String dispid, String property);
private native void xsetProperty2(String dispid, Object property);
private native Object xinvoke(String dispid);
private native Object xinvoke1(String dispid, Object p1);
private native Object xinvoke2(String dispid, Object p1, Object p2);
private native Object xinvoke3(String dispid, Object p1, Object p2, Object p3);
private native Object xinvoke4(String dispid, Object p1, Object p2, Object p3, Object p4);
private native Object xinvokeX(String dispid, Object params[]);
};

Просмотреть файл

@ -0,0 +1,10 @@
/* NOTE: This is a C file to avoid some nasty typecasting issues that C++ has
with the JDK generated code.
*/
// #define NO_JDK
#define IMPLEMENT_MozAxPlugin
#include "_stubs/MozAxPlugin.c"
#include "_stubs/netscape_plugin_Plugin.c"
#include "_stubs/java_lang_String.c"
// #include "_stubs/java_lang_Object.c"

Просмотреть файл

@ -52,11 +52,17 @@ MOZ_ACTIVEX_PLUGIN_SUPPORT = 1
# Specify where the PluginSDK, Java compiler, header file
# generator and classes live.
#
# Note 1: you must use the javah from Netscape PluginSDK.
# Note 2: you must use JDK1.3 or earlier which has the old JNI support (& oldjavac)
# You need the Netscape PluginSDK:
#
# http://home.netscape.com/comprod/development_partners/plugin_api/index.html
#
# You also need a JDK with an oldstyle java compiler. Anything from 1.3 downwards
# should do. See here for various JDK releases:
#
# http://java.sun.com/products/archive/index.html
!ifdef MOZ_ACTIVEX_PLUGIN_LIVECONNECT
MOZ_PLUGINSDK = C:\m\PluginSDK
MOZ_PLUGINSDK = C:\m\PluginSDK3
JAVADIR = C:\j2sdk1.3.1
JAVAH = $(MOZ_PLUGINSDK)\bin\win32\javah
JAVAC = $(JAVADIR)\bin\oldjavac
@ -78,33 +84,6 @@ MOZCTLSRC=../control
###############################################################################
# Specify the path to the Communicator plugin SDK or get an error message!
!ifdef MOZ_ACTIVEX_PLUGIN_LIVECONNECT
!ifndef MOZ_PLUGINSDK
!message The build cannot proceed because LiveConnect requires a path to
!message the PluginSDK.
!message
!message Please specify the path to the SDK either by setting the MOZ_PLUGINSDK
!message environment variable or as a parameter to nmake. e.g.
!message
!message set MOZ_PLUGINSDK=c:\pluginsdk
!message nmake /f makefile.win
!message
!message Or:
!message
!message nmake /f makefile.win MOZ_PLUGINSDK=c:\pluginsdk
!message
!message The Plugin SDK can be found at:
!message
!message ftp://ftp.netscape.com/pub/sdk/plugin/windows/winsdk40.zip
!message
!error
!endif
!endif
!ifdef MOZ_ACTIVEX_PLUGIN_XPCONNECT
XPIDLSRCS = \
.\nsIMozAxPlugin.idl \
@ -121,6 +100,9 @@ OBJS = \
.\$(OBJDIR)\LegacyPlugin.obj \
.\$(OBJDIR)\MozActiveX.obj \
.\$(OBJDIR)\npwin.obj \
!ifdef MOZ_ACTIVEX_PLUGIN_LIVECONNECT
.\$(OBJDIR)\javastubs.obj \
!endif
$(NULL)
# most of these have to be here for nsSetupRegistry.cpp...
@ -190,22 +172,27 @@ $(DEFFILE) : mkctldef.bat
!ifdef MOZ_ACTIVEX_PLUGIN_LIVECONNECT
.\MozAxPlugin.class: .\MozAxPlugin.java
$(JAVAC) -classpath $(CLASSPATH) MozAxPlugin.java
$(JAVAH) -classpath $(CLASSPATH) -jri -d _gen MozAxPlugin
$(JAVAH) -classpath $(CLASSPATH) -jri -stubs -d _stubs MozAxPlugin
.\_gen\java_lang_Object.h : $(JAVACLASSES)
$(JAVAH) -classpath $(CLASSPATH) -jri -d _gen java.lang.Object
.\_stubs\java_lang_Object.c : $(JAVACLASSES)
$(JAVAH) -classpath $(CLASSPATH) -jri -stubs -d _stubs java.lang.Object
.\_gen\java_lang_String.h : $(JAVACLASSES)
$(JAVAH) -classpath $(CLASSPATH) -jri -d _gen java.lang.String
.\_stubs\java_lang_String.c : $(JAVACLASSES)
$(JAVAH) -classpath $(CLASSPATH) -jri -stubs -d _stubs java.lang.String
.\_gen\netscape_plugin_Plugin.h : $(JAVACLASSES)
$(JAVAH) -classpath $(CLASSPATH) -jri -d _gen netscape.plugin.Plugin
.\_stubs\netscape_plugin_Plugin.c : $(JAVACLASSES)
$(JAVAH) -classpath $(CLASSPATH) -jri -stubs -d _stubs netscape.plugin.Plugin
.\_gen\MozAxPlugin.h : .\MozAxPlugin.class
$(JAVAH) -classpath $(CLASSPATH) -jri -d _gen MozAxPlugin
.\_stubs\MozAxPlugin.c : .\MozAxPlugin.class
$(JAVAH) -classpath $(CLASSPATH) -jri -stubs -d _stubs MozAxPlugin
!endif
ActiveScriptSite.cpp: $(MOZCTLSRC)/ActiveScriptSite.cpp
@ -215,16 +202,29 @@ MozActiveX.res: MozActiveX.rc resource.h
MozActiveX.cpp: StdAfx.h
!ifdef MOZ_ACTIVEX_PLUGIN_LIVECONNECT
.\$(OBJDIR)\javastubs.obj : javastubs.c
javastubs.c : \
.\MozAxPlugin.class \
.\_gen\netscape_plugin_Plugin.h \
.\_gen\java_lang_Object.h \
.\_stubs\netscape_plugin_Plugin.c \
.\_stubs\java_lang_Object.c \
.\_stubs\java_lang_String.c \
$(NULL)
!endif
LegacyPlugin.cpp: StdAfx.h \
!ifdef MOZ_ACTIVEX_PLUGIN_XPCONNECT
.\_xpidlgen\nsIMozAxPlugin.h \
!endif
!ifdef MOZ_ACTIVEX_PLUGIN_LIVECONNECT
.\_gen\MozAxPlugin.h \
.\MozAxPlugin.class \
.\_gen\netscape_plugin_Plugin.h \
.\_gen\java_lang_Object.h \
.\_stubs\MozAxPlugin.c \
.\_stubs\netscape_plugin_Plugin.c \
.\_gen\java_lang_String.h \
!endif
$(NULL)