Tôi biết rằng mã Java có thể gọi mã C++ thông qua JNI. Có thể, tuy nhiên, để gọi mã Java từ C++ một lần nữa thông qua JNI hoặc với bất kỳ phương pháp nào khác?C++ có thể gọi mã Java không?
8
A
Trả lời
10
Bạn chắc chắn có thể. Dưới đây là một ví dụ:
Dưới đây là file java:
public class InvocationHelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
System.out.println("Arguments sent to this program:");
if (args.length == 0) {
System.out.println("(None)");
} else {
for (int i=0; i<args.length; i++) {
System.out.print(args[i] + " ");
}
System.out.println();
}
}
}
Và heres một số C++ sử dụng nó:
void invoke_class(JNIEnv* env) {
jclass helloWorldClass;
jmethodID mainMethod;
jobjectArray applicationArgs;
jstring applicationArg0;
helloWorldClass = (env)->FindClass("InvocationHelloWorld");
if(! helloWorldClass)
{
std::cerr<<"Couldn't get \"InvocationHelloWorld\""<<std::endl;
return;
}
mainMethod = (env)->GetStaticMethodID(helloWorldClass, "main", "([Ljava/lang/String;)V");
if(! mainMethod)
{
std::cerr<<"Coulnd't get \"InvocationHelloWorld::main\""<<std::endl;
return;
}
applicationArgs = (env)->NewObjectArray(1, (env)->FindClass("java/lang/String"), NULL);
applicationArg0 = (env)->NewStringUTF("From-C-program");
(env)->SetObjectArrayElement(applicationArgs, 0, applicationArg0);
(env)->CallStaticVoidMethod(helloWorldClass, mainMethod, applicationArgs);
}
+0
Hoàn hảo, cảm ơn :-) –
4
Bạn cũng có thể sử dụng SWIG để tự động tạo các tập tin JNI. Quá trình cài đặt có thể là một chút khó khăn nhưng nó rất hữu ích khi bạn có rất nhiều mã C++ để lộ
Các vấn đề liên quan
- 1. Gọi mã C# từ Java?
- 2. Gọi phương thức C từ mã C++/Java/C#?
- 3. Matlab có thể tạo mã nguồn Java không?
- 4. gọi C++ mã từ c
- 5. Có thể gọi API COM từ Java không?
- 6. Làm thế nào để gọi mã Java từ C#?
- 7. Gọi mã Scala từ Java?
- 8. Có thể tượng trưng cho mã C++ không?
- 9. C# có một Trình mã hoá chuỗi như Java không?
- 10. Có tương đương trong C# với mã Java này không?
- 11. Tôi có thể tham khảo các đối tượng C++ trong Mã Java bằng JNI không?
- 12. java có thể chạy mã scala đã biên dịch không?
- 13. Tôi có thể viết mã Java trong XCode 3.2.1 không?
- 14. Tôi có thể biên dịch Java thành mã gốc không?
- 15. Gọi C# dll từ Java
- 16. Bạn có thể gọi hàm C# từ JavaScript không?
- 17. Có thể gọi hàm C++ từ JavaScript trong QWebView không?
- 18. Gọi C++ dll từ Java
- 19. Tôi có thể gọi mã .NET từ Java bằng cách nào?
- 20. Gọi cho thành viên của lớp JAVA từ mã Native C/C++
- 21. Cách gọi một servlet từ mã Java
- 22. Mã sau có gọi UB không?
- 23. Mã Lisp được gọi từ Java
- 24. Có thể chạy mã Native C++ trong Windows Azure không?
- 25. Có thể tuần tự hóa khối mã C# không?
- 26. gọi phương thức java trong mã javascript
- 27. Mã C có chạy nhanh hơn không?
- 28. Tôi có thể gọi hàm thời gian chạy CUDA từ mã C++ không được biên dịch bởi nvcc không?
- 29. Tôi có thể gọi Perl từ Java bằng cách nào?
- 30. Tôi có thể ném ngoại lệ C++ từ cuộc gọi lại C cũ không?
Tôi không biết cụ Dumbledore thích lập trình :) –
tôi nghe ông là một thuật sĩ tại những thứ! – Luminously
@Tôi đã nhìn thấy mã của anh ấy. Thật kỳ diệu. – mcfinnigan