在Java中調(diào)用C++接口需要使用JNI(Java Native Interface)技術(shù)。
下面是一個簡單的示例:
首先,在C++中定義一個接口和實現(xiàn):
// 接口定義
class MyInterface {
public:
virtual void myMethod() = 0;
};
// 接口實現(xiàn)
class MyImplementation : public MyInterface {
public:
void myMethod() {
// 實現(xiàn)具體的功能
// ...
}
};
然后,使用Java Native Interface(JNI)來調(diào)用C++接口。
首先,需要在Java中聲明本地方法:
public class MyJavaClass {
private native void callNativeMethod();
}
然后,使用javah
命令生成C++頭文件MyJavaClass.h
:
javah -jni MyJavaClass
得到的MyJavaClass.h
文件類似如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class MyJavaClass */
#ifndef _Included_MyJavaClass
#define _Included_MyJavaClass
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: MyJavaClass
* Method: callNativeMethod
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_MyJavaClass_callNativeMethod
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
接下來,在C++中實現(xiàn)callNativeMethod
方法:
#include "MyJavaClass.h"
#include "MyImplementation.h"
JNIEXPORT void JNICALL Java_MyJavaClass_callNativeMethod(JNIEnv *env, jobject obj) {
MyImplementation impl;
impl.myMethod();
}
最后,使用javac
命令編譯Java類:
javac MyJavaClass.java
使用g++
命令編譯C++代碼:
g++ -c -fPIC MyJavaClass.cpp -o MyJavaClass.o
g++ -shared -o libmylibrary.so MyJavaClass.o -lc
最后,運行Java程序:
java -Djava.library.path=. MyJavaClass
這樣就可以通過Java調(diào)用C++接口了。