2011-10-15 3 views
0

C++에 벡터 클래스 (또는 다른 코드)를 작성하고 싶습니다. 그리고 나는 Java로부터 메소드를 사용하고 싶습니다. 이 작업을 수행하는 방법? 이 목적으로 JNI를 사용하고 싶습니다. 하지만 javah가 나에게 프로토 타입을 생성시킨다. C++ 사용 영역에 데이터를 저장하고 Java없이 필드가없는 인터페이스 만 사용하려고합니다. 따라서 문제는 벡터 데이터를 C 코드에 저장하는 방법입니다.네이티브 코드에 데이터 저장

참고 :

간단히 말해서, 나는 JNI로 C++ 인터페이스를 포장하고 자바에서이 인터페이스를 가질 필요가있다.

답변

0

C++ 코드 주위에 C 호출 가능 래퍼가 있어야합니다.

void * MyVectorCreate() 
{ 
    return new MyVector<int>(); 
} 

void MyVectorAdd(void * vector, int item) 
{ 
    static_cast<MyVector<int> *>(vector)->Add(item); 
} 

void MyVectorDestroy(void * vector) 
{ 
    delete static_cast<MyVector<int> *>(vector); 
} 
+0

: - 접근 방식은 당신이 여기에 간단한 예입니다 순수 C.에서 사용할 수하는 C++ 라이브러리 수있는 얼마나 유사하다 (오류가 전혀 확인되지와 을 실제 생산 코드 사용하지 마십시오) 그러나 MyVectorCreate()에서 결과를 저장할 위치는 어디입니까? 그리고 MyVectorAdd와 MyVectorDestroy에 대해 무효 * vecto를 가져갈 위치는 어디입니까? – itun

+0

JNI처럼 C에서 Java, Java에서 C로 앞뒤로 캐스팅하는 'long'으로 'void *'를 처리해야합니다. – bobbymcr

+0

그래서 MyVectorCreate가 Java에서 어떻게 보이야할까요? MyVectorDestroy를 호출 할 때 – itun

관련 문제