JNI-работа с API
Хочется попользовать апи одного продукта с пом. JNI. Нашел в мсдн простейший пример пользования JNI:
greet.cpp
---------
#include "TestJNI.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_TestJNI_greetings(JNIEnv *env,jobject jobj) {
printf("Hello from Visual C++!");
}
TestJNI.java
-----------
public class TestJNI {
public native void greetings();
static {
System.loadLibrary("greet");
}
public static void main(String args[]) {
new TestJNI().greetings();
}
}
Так вот, в срр я хочу задать методы, которые использует апи моего приложения, т.е. вместо
printf("Hello from Visual C++!");
у меня будут вызываться ряд методов - открывающие приложение через апи, выпольняющие какие-то с ним действия, закрывающие его. Как это прописать я знаю. А как сделать, чтобы с пом. JNI это все корректно вызвалось. Видимо как-то надо изменить аргументы void main в java и
JNICALL Java_TestJNI_greetings в срр, но как? АПИ методы работают с объектами...
Может кто сталкивался с подобным, помогите, пожалуйста.
Спасиб!
Вы не можете изменить список аргументов метода main - jvm просто не сможет найти точку запуска для Вашего приложения. Сигнатуры методов для JNI тоже подчиняются определенным правилам. Вам необходимо написать код на С который будет работать с интересующим Вас АPI. А java загрузит Вашу библиотеку и вызовет функцию Java_TestJNI_greetings когда Вы вызываете метод greetings()