Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo llamar a un archivo DLL generado por lenguaje C en Java? El siguiente ejemplo calcula la longitud de la cadena llamando a una DLL escrita en C.1. Genere el archivo de encabezado c 1. Edite Main.java public class main { public native static int get strnum(byte str[], int strlen);} 2. Genere el archivo de encabezado Presione win+r para abrir la ventana "Ejecutar", ingrese " cmd "Abre una ventana de consola de DOS. Ingrese al directorio donde se encuentra Main.java arriba, ingrese: javac Main.java javah main Una vez completados los dos comandos, se generará el archivo Main.h. 2. Genere la DLL 1. Cree un nuevo proyecto vacío en la aplicación de consola VS: Win32, asígnele el nombre "MakeDLL" y seleccione un proyecto vacío. Modifique las propiedades del proyecto después de la construcción: (1) En circunstancias normales, cambie el "Tipo de configuración" a "Biblioteca dinámica (.dll)" (2) En General de C/C++, de acuerdo con la ruta JAVA que instaló, en; "Se agregan dos elementos adicionales al "directorio de inclusión": "C: archivo de programa javajdk1.5.0_06 incluido" y "C: archivo de programa javajdk1.5.0_06 incluye win32". Esto se debe a que los archivos JAVA como jni.h se utilizan en la compilación C/C++. 2. Agregue el Main.h generado anteriormente al proyecto. 3. Cree un nuevo archivo main.cpp, el código es el siguiente: # include 'main ) {JByte * buffer = (* env). getByteArrayElements (str.buffer[strLen]=""; //Debido a que JAVA asigna espacio automáticamente, debe pasar el parámetro de longitud de la cadena jint len ​​​​= strlen((char *)buffer); return len} 4. Presione F7 para compilar y vincular Genere el archivo MakeDLL.dll 3. JAVA llama al archivo DLL generado anteriormente en JAVA: 1. Copie MakeDLL.dll en el mismo directorio que el archivo JAVA 2. El código fuente del archivo Java: clase pública. principal {static {system. loadlibrary("make dll");} public native static int getStrNum(byte str[], int public static void Main(String[]args){ Instancia principal = new Main(); String str = new string ('jaja'); int num = instancia. getstrnum(str. getbytes(), str. length()); funciones El proceso de paso de parámetros, como el tipo int, se puede obtener directamente de la tabla de parámetros de funciones JNI; los elementos de la matriz se obtienen a través de JNIEnv: jbyte * buffer = (* env) getbytearray element (str, 0); la lista de parámetros. variable jbyteArray. De manera similar, puede obtener los elementos de char []. Cuando la función regresa, puede usar la declaración de retorno para devolverlo directamente. También puede configurar el puntero de la variable en la lista de parámetros para que regrese: (*entorno).

¿Cómo llamar a un archivo DLL generado por lenguaje C en Java? El siguiente ejemplo calcula la longitud de la cadena llamando a una DLL escrita en C.1. Genere el archivo de encabezado c 1. Edite Main.java public class main { public native static int get strnum(byte str[], int strlen);} 2. Genere el archivo de encabezado Presione win+r para abrir la ventana "Ejecutar", ingrese " cmd "Abre una ventana de consola de DOS. Ingrese al directorio donde se encuentra Main.java arriba, ingrese: javac Main.java javah main Una vez completados los dos comandos, se generará el archivo Main.h. 2. Genere la DLL 1. Cree un nuevo proyecto vacío en la aplicación de consola VS: Win32, asígnele el nombre "MakeDLL" y seleccione un proyecto vacío. Modifique las propiedades del proyecto después de la construcción: (1) En circunstancias normales, cambie el "Tipo de configuración" a "Biblioteca dinámica (.dll)" (2) En General de C/C++, de acuerdo con la ruta JAVA que instaló, en; "Se agregan dos elementos adicionales al "directorio de inclusión": "C: archivo de programa javajdk1.5.0_06 incluido" y "C: archivo de programa javajdk1.5.0_06 incluye win32". Esto se debe a que los archivos JAVA como jni.h se utilizan en la compilación C/C++. 2. Agregue el Main.h generado anteriormente al proyecto. 3. Cree un nuevo archivo main.cpp, el código es el siguiente: # include 'main ) {JByte * buffer = (* env). getByteArrayElements (str.buffer[strLen]=""; //Debido a que JAVA asigna espacio automáticamente, debe pasar el parámetro de longitud de la cadena jint len ​​​​= strlen((char *)buffer); return len} 4. Presione F7 para compilar y vincular Genere el archivo MakeDLL.dll 3. JAVA llama al archivo DLL generado anteriormente en JAVA: 1. Copie MakeDLL.dll en el mismo directorio que el archivo JAVA 2. El código fuente del archivo Java: clase pública. principal {static {system. loadlibrary("make dll");} public native static int getStrNum(byte str[], int public static void Main(String[]args){ Instancia principal = new Main(); String str = new string ('jaja'); int num = instancia. getstrnum(str. getbytes(), str. length()); funciones El proceso de paso de parámetros, como el tipo int, se puede obtener directamente de la tabla de parámetros de funciones JNI; los elementos de la matriz se obtienen a través de JNIEnv: jbyte * buffer = (* env) getbytearray element (str, 0); la lista de parámetros. variable jbyteArray. De manera similar, puede obtener los elementos de char []. Cuando la función regresa, puede usar la declaración de retorno para devolverlo directamente. También puede configurar el puntero de la variable en la lista de parámetros para que regrese: (*entorno).

setbytearrayregion (byteearray, 0, 128, bybytearr); ByteArray es una variable jbyteArray en la lista de parámetros y devuelve la información que se devolverá como un puntero. ByteArr es de tipo jbyte* y el valor almacenado en él es el contenido que se devolverá. Para obtener más información, puede buscar "jni" o "java call DLL" en Google o Baidu. (T007)