🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #17143

Re: Callback en Java (2)

#17143
From: Alberto Fdez
Date: Fri, 01 Dec 2000 00:00
102 lines
3468 bytes
On Thu, 30 Nov 2000 21:57:57 +0100, Juan Gonzalo de Silva Medina
<gonzalo@caymasa.es> wrote:


>
>
>Alberto Fdez wrote:
>
>> [...]
>> (hablando en entornos MS-Windows)
>> Tengo una DLL y una aplicaci�n Java, esta Dll a veces necesita dar una
>> notificaci�n (un aviso no esperado por la aplici�n Java) a la
>> aplicacion Java, y ese es mi plroblema.
>> 
>> Empleando JNI, se puede hacer (un mini-esqueleto)
>> [...]


>
>No me queda muy claro, pero...

	Sorry,..

>
>Imagino que estas hablando de que en la DLL tienes un thread (o se
>arranca)y que cuando ocurre algo tu lo quieres notificar a un objeto que
>te han pasado si ha ocurrido algo.
>
>En principio yo lo que haria es crear el m�todo de la DLL est�tico, sin
>thread y me encargaria de ejecutarlo dentro de un thread de Java, para
>evitar la p�rdida del env.

	Ok, (lo que tengo, y falla ...)

[JAVA]
public class jPruListen
{
	public static void onFuncion(int N)
	{
		System.out.println("Parametro ofrecido : " + N);
	}
}
// --------------------------------------------------------------------------

[C++]
__declspec(dllexport) int FuncPuente(int N)
{
	//
	// A "FuncPuente" la llamamos desde una pulsaci�n de un Bot�n.
	// Al pulsar, "FuncPuente" entra en juego.
	//
	TRZDBG1("*** [DLL] INI FuncPuente().");

	// ---------------------------------------------------------
	// Llamamos (Intentamos) al metodo jPruListen.onFuncion
	// ---------------------------------------------------------
	//
	JavaVM *jvm=NULL;
	JNIEnv *env=NULL;
	JDK1_1InitArgs vm_args;
	jint iRet=0;

	vm_args.version = 0x00010001;
	iRet=JNI_GetDefaultJavaVMInitArgs(&vm_args); // Ok
	iRet=JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); // Ok
	iRet=jvm->AttachCurrentThread((void**)&env, 0); // Ok

	jclass cls = env->FindClass("jPruListen"); // Aqu� --> ERROR
	jmethodID mid = env->GetStaticMethodID(cls, "onFuncion", "(I)V");
	env->CallStaticVoidMethod(cls, mid, 5);
	jvm->DetachCurrentThread();
	jvm->DestroyJavaVM();    

	return 0;
}
// --------------------------------------------------------------------------


>
>Cuando ocurre alg�n evento llamo al m�todo en cuesti�n del objeto (esto
>si funciona, que yo tengo alguna llamada as�).

	Agradecer�a una buena "orientaci�n", un pseudo codigo bastar�a.

>
>Luego vuelvo al inicio de la rutina C para seguir procesando (a la
>espera de lo que tu quieras).
>
>Tambi�n puedo retornar a Java y que este dentro del m�todo run me llame
>de nuevo si es necesario.
>
>Tambi�n, si lo que quiero hacer es soportar multiples listener, lo que
>haria es llamar a un m�todo de mi propio objeto y le pediria que hiciese
>la notificaci�n en mi lugar, claro que llamando al m�todo java que hace eso.

Juan, gracias por adelantado.



--
Alberto Fdez 
<afa07$%&tid.es> // Where "$%&" = '@', Of course ...
Technical Details
Message-ID: <otue2tg89dg7hc87a0cggf4faqucqbhn3i@4ax.com>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <902rmp$msd$1@nnrp1.deja.com> <3A26BF55.3010008@caymasa.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,766135f76ea77199
X-Google-Attributes: gid1116f3,public
From: Alberto Fdez <albertoFdez@ver.Firma.see.Signature>
Subject: Re: Callback en Java (2)
Date: 2000/12/01
Message-ID: <otue2tg89dg7hc87a0cggf4faqucqbhn3i@4ax.com>
X-Deja-AN: 699878128
Content-Transfer-Encoding: 8bit
References: <902rmp$msd$1@nnrp1.deja.com> <3A26BF55.3010008@caymasa.es>
Organization: Telefonica I+D
Content-Type: text/plain; charset=ISO-8859-1
Mime-Version: 1.0
Newsgroups: es.comp.lenguajes.java