Mam dll C++, który chcę użyć w Unity, eksportując funkcje do C#. Projekt Unity działa na urządzeniach z Androidem, a kod C++ korzysta z java. Aby zainicjować C++ trzeba najpierw wywołać następującą funkcję:Uzyskiwanie poprawnego wskaźnika JNIEnv
void api_initialize(JNIEnv* env, jobject* app_context, jobject* class_loader) {
JavaVM* vm = nullptr;
env->GetJavaVM(&vm);
if (!vm) {
return;
}
//Do other proprietary things
}
w jedności mam następujące eksportowane funkcja dll
[DllImport (dllName)]
private static extern void api_initialize (IntPtr java_env, IntPtr app_context, IntPtr class_loader);
Moje pytanie brzmi Jak mogę uzyskać wskaźnik JNIEnv w moim C# klasa, która następnie przechodzi jako parametr do tej funkcji?
Nie jestem twórcą tego API i nie mam dostępu do jego modyfikacji, więc muszę uzyskać JavaVM z JNIEnv, a nie na odwrót.
wierzę, że można znaleźć odpowiedź tutaj-> http://stackoverflow.com/questions/21951711/how-to-pass-a-jni-c-sharp-class-into-java- or-handle-this- lub stwórz swój własny wywołanie java za pomocą dokumentacji Oracle -> situationhttp: //docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp715 W każdym razie to bardzo dobre pytanie. – Cabrra