Mezcla de lenguajes

Iniciado por Codename!!, 16 Marzo 2008, 22:29 PM

0 Miembros y 1 Visitante están viendo este tema.

Codename!!

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!
No te dejes mover por las masas, se tu mismo.





Sin Nick xD

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
Yo solo creería en un Dios que supiese bailar.

Codename!!

hasta que no vea un ejemplo no se me ecnendera la bombilla xdd
No te dejes mover por las masas, se tu mismo.





Sin Nick xD

Yo solo creería en un Dios que supiese bailar.

-Ramc-

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.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Ragnarok

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.
No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

JWizard

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 ///////////////////////////////


/* 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 /////////////////////////////////

#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 ////////////////////////////////


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:

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....

gcc -shared -o api.dll api.o api.def


el archivo def tiene la funcion que vas a exportar asi:

EXPORTS
Java_Main_getShortPathName

Codename!!

No te dejes mover por las masas, se tu mismo.