Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Codename!! en 16 Marzo 2008, 22:29 pm



Título: Mezcla de lenguajes
Publicado por: Codename!! en 16 Marzo 2008, 22:29 pm
Hola!!

He estado googleando y no he podido conseguir nada en claro, se que hay gente que lo hace pero no se como ni tmpoco lo explica, estoy hablando de mezclar lenguajes de programacion, por ejemplo java y vb, o java y delphi,  cosas asi ya que cada lenguaje tiende mas hacia una especialidad...

Pediria a alguien que supiera de eso, que pusiera un simple ejemplo de como se combinarian vb ( o delphi ) con java, nose, por ejemplo que desde un boton hecho en vb llamase a un procedimiento hecho en java o algo asi.


Mil Gracias!


Título: Re: Mezcla de lenguajes
Publicado por: Sin Nick xD en 16 Marzo 2008, 22:36 pm
1º Haces una dll con el procedimiento que quieras llamar en vb
2ºdeclaras la funcion en vb
3º cumples los parametros de la dll

listo

No me prguntes sobre como acer una dll ^Ç^ yo estoy intendolo desde hace tiempo y no he tenido total exito

salu2


Título: Re: Mezcla de lenguajes
Publicado por: Codename!! en 16 Marzo 2008, 22:48 pm
hasta que no vea un ejemplo no se me ecnendera la bombilla xdd


Título: Re: Mezcla de lenguajes
Publicado por: Sin Nick xD en 16 Marzo 2008, 23:04 pm
Lo primero que salio en google

http://www.elguille.info/vb/avanzado/crear_dll_windows_con_vb6_explicado.htm

No te ofendas es solo que asy fue

salu2


Título: Re: Mezcla de lenguajes
Publicado por: -Ramc- en 16 Marzo 2008, 23:20 pm
Que yo sepa, lo que puedes hacer codificar un metodo nativo que llame a C y de C puedes llamar a ensamblador y ahí estarias usando esos 2 lenguajes, Java no usa dll's pero usa código nativo, entonces desde C puedes llamar a una dll.

Por ejemplo:

public class HolaNativo{
public native void Hola();
static {
System.loadLibrary("LibHola");
}
public static void main( String[] args ) {
new HolaNativo().Hola();
}
}

Esa seria la parte de Java, pero debes crear los stubs y la libreria compartida fuera de la clase de C.


Título: Re: Mezcla de lenguajes
Publicado por: Ragnarok en 17 Marzo 2008, 01:17 am
Pues hay muchas formas distintas, en C y C++ es habitual que otros lenguajes de programación generen código objeto y luego se enlace todo junto.

En java puede pasar que otros lenguajes generen bytecode, ya sea como .class o más habitualmente en un .jar y que se enlace igualmente.

Y también está la plataforma .NET, las dlls de windows que ya han mencionado y otras muchas soluciones.


Título: Re: Mezcla de lenguajes
Publicado por: JWizard en 19 Marzo 2008, 00:36 am
Hola! como bien te dicen puedes hacer uso de la JNI, yo apenas ayer la use, necesitaba usar el nombre corto ( formato 8.3 ) de los archivos en windows, pues desde mi programa java ejecutaba otro que recibe parametros desde la consola.

aqui te dejo un ejemplo, espero te sirva.

////////////////////// ARCHIVO Main.h ///////////////////////////////

Código:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Main */

#ifndef _Included_Main
#define _Included_Main
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Main
 * Method:    getShortPathName
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_Main_getShortPathName
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif


//////////////////////// ARCHIVO Main.c /////////////////////////////////
Código:
#include <jni.h>
#include <stdio.h>
#include <windows.h>
#include "Main.h"

JNIEXPORT jstring JNICALL Java_Main_getShortPathName
  (JNIEnv *env, jobject o, jstring thePath) {
         
 long lResult = 0;
 WCHAR buff[255];
 const jchar *utfPath = (*env)->GetStringChars(env,thePath,NULL);
 
 lResult = GetShortPathNameW(utfPath,buff,255);
 
 (*env)->ReleaseStringChars(env,thePath,utfPath);         
  return (*env)->NewString(env,buff,lResult);
}

//////////////////////// Main.java ////////////////////////////////

Código:
public class Main {
   
    private native String getShortPathName(String thePath);
   
    public static void main(String[] args) {
        Main app = new Main();
        System.out.println(app.getShortPathName("C:\\Documents and Settings");
    }
   
    static {
        System.loadLibrary("api");
    }

}

para compilar la dll use mingw asi:
Código:
gcc -c -I"aqui el path de tu java\include" -I"aqui el path de tu java\include\win32" -o api.o Main.c

y despues....
Código:
gcc -shared -o api.dll api.o api.def

el archivo def tiene la funcion que vas a exportar asi:
Código:
EXPORTS
Java_Main_getShortPathName


Título: Re: Mezcla de lenguajes
Publicado por: Codename!! en 20 Marzo 2008, 22:58 pm
asias jwiz!