¿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?
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: ); p>
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.