Red de conocimiento informático - Aprendizaje de programación - ¿Cómo pasar un puntero al llamar a una DLL en Java y cómo obtener el valor del puntero después de la llamada?

¿Cómo pasar un puntero al llamar a una DLL en Java y cómo obtener el valor del puntero después de la llamada?

Supongamos que tengo una biblioteca de vínculos dinámicos llamada test.dll, cuya función es la siguiente: biblioteca de vínculos dinámicos de dll:

extern "C" int add(int* a, int* b, int* c, int d, char* PicPath)

{

ARCHIVO *fp;

fp=fopen (PicPath, "wt");

for(int i=0;i

{

c[i]=a[i] b[i];

fprintf(fp," d \n", c[i]);

}

fclose(fp);

Devuelve 1;

}< / p>

La función de esta función es sumar los valores de las dos matrices a, by la matriz c que almacena la suma, y ​​escribir la suma en el archivo especificado. El tamaño de la matriz

>

se pasa determinado por los parámetros.

Pregunta:

1. Cómo llamar a parámetros de tipo puntero en Java

2. ¿Se pueden pasar parámetros enteros directamente? )

3. ¿Por qué PicPath es un tipo de puntero y no un tipo CString?

4. Java llama a enlaces dinámicos El código de la biblioteca es el siguiente:

JNative t= new JNative("test.dll", "add" // Carga el archivo test.dll y llama al método add ;

t. setRetVal(Type.INT); //Establece el tipo de retorno después de la llamada

//Construye un puntero en Java y asigna espacio para el puntero

Puntero a = nuevo puntero( MemoryBlockFactory.

Puntero b = nuevo puntero(MemoryBlockFactory.createMemoryBlock(4 * 10));

Puntero c = nuevo puntero(MemoryBlockFactory.createMemoryBlock (4 * 10));

Puntero strP = createPointer(100);

strP.setStringAt(0, "C:\\1.txt ");

int d=10;

// Asignar valores a los arrays a y b:

for (int i = 0; i

a .setIntAt(4 * i, i);

b.setIntAt(4 * i, i

}

//Establecer parámetros:

t.setParameter.

t.setParameter(0, a);

t.setParameter(1, b); setParameter(2, c);

t .setParameter(3, d);

t.setParameter(4, strP);

t.invoke( ); // Llama a la función y ejecútala

// Genera el valor de la suma Nota: los valores heterogéneos deben almacenarse en 4 bytes, por lo que j debe multiplicarse por 4 al frente. /p>

for (int j = 0; j

System.out.println(c. getAsInt(4 * j));

}

// Liberar memoria

a.dispose();

p>

b.dispose();

c.dispose();

c.dispose();

Está bien, un completo. El ejemplo de llamada terminó. Acabo de escribir el código clave en el programa. Necesitas escribir un

. clase, herede una clase base y luego reescriba el código en la clase base. Los métodos son relativamente simples, puede consultar otros ejemplos en Internet.

Preguntas y respuestas:

1. Java llama a parámetros de tipo puntero: necesita crear una variable de puntero y asignarle espacio;

2. pasado directamente;

3. Java llama a parámetros de tipo de puntero: necesita crear una variable de puntero y asignarle espacio.

4. una variable de puntero y asignarle espacio;

5. Java llama a parámetros de tipo de puntero: necesita crear una variable de puntero y asignarle espacio. El soporte de JNative para el tipo CString no es muy bueno. Cuando se llama al método CString, a menudo se informan algunas excepciones, así que cambié la ruta a

Puntero de carácter

4. parámetros como salida: puede ver en el ejemplo anterior cómo se configura y genera la matriz c.