티스토리 뷰
앞서 C++에서 JNI를 사용하기위해 프로젝트 셋팅작업을 끝냈습니다.
이번에는 간단하게 Java class를 생성하여 클래스안에 있는 메서드를 호출하는 예제를 만들어보겠습니다.
코드는 어려운게 없으니 천천히 따라오시면 쉽게 구현하실수 있습니다.
1. Hello.class 만들기
public class Hello { void sayHello() { System.out.println("Say HELLOOO"); } }
생성자가없는 Hello.java 파일입니다. 간단하게 sysout으로 인사말을 프린트 하는 메서드입니다. 위의 코드를 코딩하셔서 java파일로 만드시고
javac 명령어를 사용하여 java파일은 class파일로 컴파일 시켜주세요
javac Hello.java
위에서 생성한 Hello.class파일을 C:\Java\src 경로에 넣어주세요! 해당 경로는 c++ 에서 java 클래스파일을 읽어올 경로입니다. c++ 프로젝트 내부에 상대경로로 설정하셔도 됩니다만 저는 C드라이브 밑에 간단하게 테스트용으로 생성했습니다.
2. c++ 코딩
#include#include #include "stdafx.h" #include using namespace std; void main() { // JavaVM 생성 & JVM 환경설정 JavaVMOption options; JavaVMInitArgs vm_args; JNIEnv *env; JavaVM *jvm; long status; options.optionString = "-Djava.class.path=C:\\Java\\src"; // 자바 클래스파일이 있는 경로 memset(&vm_args, 0, sizeof(vm_args)); vm_args.version = JNI_VERSION_1_6; vm_args.nOptions = 1; vm_args.options = &options; status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); cout << "JVM 구동!" << endl; jclass cls; jmethodID mid; jobject obj; int staticresult = 0; int result = 0; if (status != JNI_ERR) { cls = env->FindClass("Hello"); // Hello.class를 찾아 jclass를 생성한다. if (cls != 0) { jmethodID cls_constructor = env->GetMethodID(cls, " ", "()V"); // Hello.class의 기본생성자를 찾아 생성자 메소드를 생성한다. if (cls_constructor != 0) { obj = env->NewObject(cls, cls_constructor, "()V"); // 클래스와 클래스 생성자를 이용해 객체(object)를 생성한다. mid = env->GetMethodID(cls, "sayHello", "()V"); // Hello.class에 정의한 sayHello() 메소드를 찾아 JmethodID 담는다. env->CallIntMethod(obj, mid); // 메소드를 호출하는데 GetMethodID 함수를 이용해 위의 JmethodID를 파라메터로 넘겨준다. } } else { cout << "클래스를 찾을 수 없습니다." << endl; return; } jvm->DestroyJavaVM(); cout << "JVM 삭제" << endl; } }
}
간단하게 메인함수에서 호출하게 만들어봤습니다. 1편에서 셋팅을 제대로 하셨다면 컴파일 에러가 없으실꺼에요~
'C++' 카테고리의 다른 글
OCI와 OCCI 그리고 버그,, (0) | 2018.08.18 |
---|---|
JNI 변수 타입 및 시그니처 정보 (JNI Signiture) (0) | 2018.08.12 |
JNI를 이용하여 JAVA함수를 C++에서 사용해보자 (셋팅) JNI INVOKE (0) | 2018.08.03 |
OSI 7계층, TCP/IP 4계층 (0) | 2018.05.17 |
[C++] 가상함수 (Virtual) (0) | 2018.05.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 대항해시대 넷마블 런처
- OSI 7Layer
- JNI SIGNITURE
- Linux
- 합격 후기
- JNI INVOKE
- 정처기 실기
- 다클 빈
- EACCES: permission denied
- 대항해시대 로그인
- 데스큐어
- HTTPie
- 폴더선택다이얼로그
- 다클 코드
- 위대한 쇼맨
- JNI
- 위대한 쇼맨 후기
- 대항해시대 다클
- 정보처리기사 실기 후기
- 위대한 쇼맨 ost
- 대항해시대 런처
- vite.js
- 대항해시대
- JNI 시그니처
- 빈파일
- 대항해시대 다음 런처
- React.js
- lxd
- 구글 클라우드 플랫폼
- 정보처리기사 2018 2회
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함