QtJniTypes Namespace
QtJniTypes 네임스페이스는 Java 타입에 대응하는 C++ 타입을 선언합니다. 더 보기...
헤더: | #include <QtJniTypes> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
이후: | Qt 6.8 |
매크로
(since 6.8) | Q_DECLARE_JNI_CLASS(Type, JavaSignature) |
(since 6.8) | Q_DECLARE_JNI_NATIVE_METHOD(Method) |
(since 6.8) | Q_DECLARE_JNI_NATIVE_METHOD(Method, JavaName) |
(since 6.8) | Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method) |
(since 6.8) | Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method, JavaName) |
(since 6.8) | Q_JNI_NATIVE_METHOD(Method) |
(since 6.8) | Q_JNI_NATIVE_SCOPED_METHOD(Method, Scope) |
자세한 설명
자바 네이티브 인터페이스 프레임워크는 네이티브 C 또는 C++ 코드가 자바 API를 호출하고, 자바 코드가 JVM에서 호출할 수 있어야 하는 네이티브 C 또는 C++ 함수를 등록할 수 있게 해줍니다. Qt에서 QJniObject 및 QJniEnvironment 유형은 JNI를 사용하기 위한 편리한 래퍼를 제공합니다.
Java 언어는 C++와 마찬가지로 오버로딩을 지원하므로 전체 서명 문자열을 포함하여 함수를 지정해야 합니다. 이는 복잡하고 반복적이며 오류가 발생하기 쉬운데, 특히 함수가 여러 매개변수를 사용하는 경우 더욱 그렇습니다. QJniObject 템플릿에 전달된 C++ 유형을 기반으로 컴파일 시 함수 호출에 대한 서명 문자열을 추론할 수 있는 다양한 템플릿 API를 제공합니다. 이 기능이 작동하려면 컴파일 시점에 해당 C++ 유형과 해당 JNI 문자열의 매핑을 알고 있어야 합니다.
Qt는 표준 JNI types 에 대해 이 매핑을 구현합니다. Q_DECLARE_JNI_CLASS 매크로를 사용하면 임의의 Java 유형에 대해 매핑을 확장할 수 있습니다.
Q_DECLARE_JNI_CLASS, Q_DECLARE_JNI_NATIVE_METHOD, Q_JNI_NATIVE_METHOD 를참조하십시오 .
매크로 문서
[since 6.8]
Q_DECLARE_JNI_CLASS(Type, JavaSignature)
Java 클래스 JavaSignature 를 래핑하는 QtJniTypes 네임스페이스에 C++ 유형 Type 을 선언합니다. JavaSignature 의 Java 클래스 이름은 /
을 구분 기호로 사용하여 정규화된 이름이어야 합니다.
Q_DECLARE_JNI_CLASS(File, "java/io/File") Q_DECLARE_JNI_CLASS(FileWriter, "java/io/FileWriter")
그런 다음 C++ 클래스 QtJniTypes::File
및 QtJniTypes::FileWriter
은 해당 Java 클래스를 인스턴스화하고, 메서드를 호출하고, 자동 컴파일 타임 서명 공제를 통해 QJniObject 변형 템플릿 메서드를 통해 해당 인스턴스를 전달하는 데 사용할 수 있는 QJniObject-같은 유형이 됩니다.
using namespace QtJniTypes; File file("path/to/file"); // instantiates the java.io.File type in Java if (file.callMethod<bool>("createNewFile")) { FileWriter writer(file); // instantiates a java.io.FileWriter that operates on file writer.callMethod("write", 42); }
QJniObject API 외에도 이러한 C++ 클래스에는 이와 같이 사용할 수 있는 정적 registerNativeMethods
멤버 함수도 있습니다:
QtJniTypes::File::registerNativeMethods({ Q_JNI_NATIVE_METHOD(freeFunction) });
이 매크로는 Qt 6.8에 도입되었습니다.
Q_DECLARE_JNI_NATIVE_METHOD 및 Q_JNI_NATIVE_METHOD 을참조하세요 .
[since 6.8]
Q_DECLARE_JNI_NATIVE_METHOD(Method)
무료 C 또는 C++ 함수 Method 를 네이티브 메서드로 선언합니다. 이 메서드는 나중에 Q_JNI_NATIVE_METHOD 매크로의 도움으로 QJniEnvironment::registerNativeMethod()를 사용하여 JNI 프레임워크에 등록할 수 있습니다.
// C++ side Q_DECLARE_JNI_CLASS(MyJavaType, "my/java/Type") static void nativeFunction(JNIEnv *env, jobject thiz, jlong id) { // ... } Q_DECLARE_JNI_NATIVE_METHOD(nativeFunction) Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { QJniEnvironment env; env.registerNativeMethods<QtJniTypes::MyJavaType>({ Q_JNI_NATIVE_METHOD(nativeFunction) }); } // Java side public class MyJavaType { native public nativeFunction(long id); }
이 매크로는 Qt 6.8에 도입되었습니다.
Q_JNI_NATIVE_METHOD 및 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE 을참조하십시오 .
[since 6.8]
Q_DECLARE_JNI_NATIVE_METHOD(Method, JavaName)
이 함수는 오버로드된 함수입니다.
무료 C 또는 C++ 함수 Method 를 Java에서 JavaName 로 사용할 수 있는 네이티브 메서드로 선언합니다. 이 메서드는 나중에 Q_JNI_NATIVE_METHOD 매크로의 도움으로 QJniEnvironment::registerNativeMethod()를 사용하여 JNI 프레임워크에 등록할 수 있습니다.
이 매크로는 Qt 6.8에 도입되었습니다.
Q_JNI_NATIVE_METHOD 와 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE 를참조하십시오 .
[since 6.8]
Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method)
C++ 정적 클래스 멤버 함수 Method 를 네이티브 메서드로 선언합니다. 이 메서드는 나중에 Q_JNI_NATIVE_SCOPED_METHOD 매크로의 도움으로 QJniEnvironment::registerNativeMethod()를 사용하여 JNI 프레임워크에 등록할 수 있습니다.
class NativeHandler { // ... private: static void handleChange(JNIEnv*, jobject, jlong id); Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(handleChange) }; \dots QJniEnvironment env; env.registerNativeMethods<QtJniTypes::MyJavaType>({ Q_JNI_NATIVE_SCOPED_METHOD(handleChange, NativeHandler) });
이 매크로는 Qt 6.8에 도입되었습니다.
Q_DECLARE_JNI_NATIVE_METHOD 및 Q_JNI_NATIVE_SCOPED_METHOD 을참조하십시오 .
[since 6.8]
Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method, JavaName)
이 함수는 오버로드된 함수입니다.
C++ 정적 클래스 멤버 함수 Method 를 Java에서 JavaName 로 사용할 수 있는 네이티브 메서드로 선언합니다. 이 메서드는 나중에 Q_JNI_NATIVE_METHOD 매크로의 도움으로 QJniEnvironment::registerNativeMethod()를 사용하여 JNI 프레임워크에 등록할 수 있습니다.
이 매크로는 Qt 6.8에 도입되었습니다.
Q_DECLARE_JNI_NATIVE_METHOD 와 Q_JNI_NATIVE_SCOPED_METHOD 를참조하십시오 .
[since 6.8]
Q_JNI_NATIVE_METHOD(Method)
이전의 declared 네이티브 메서드 Method 를 JNI 프레임워크에 등록할 수 있도록 합니다. 이 매크로는 QJniEnvironment::registerNativeMethod()를 사용하여 JNI에 메서드를 등록할 때 사용합니다.
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { QJniEnvironment env; env.registerNativeMethods<QtJniTypes::MyJavaType>({ Q_JNI_NATIVE_METHOD(nativeFunction) }); }
이 매크로는 Qt 6.8에 도입되었습니다.
Q_DECLARE_JNI_NATIVE_METHOD 를참조하십시오 .
[since 6.8]
Q_JNI_NATIVE_SCOPED_METHOD(Method, Scope)
이전 declared 네이티브 메서드 Method 를 Scope 범위에서 JNI 프레임워크에 등록할 수 있게 합니다. 이 매크로는 QJniEnvironment::registerNativeMethod()를 사용하여 JNI에 메서드를 등록할 때 사용합니다.
이 매크로는 Qt 6.8에 도입되었습니다.
Q_JNI_NATIVE_METHOD 및 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE 을참조하십시오 .
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.