2013-11-14 2 views
0

C++ 파일 용 JNI를 생성하기 위해 swig 인터페이스 파일을 만들었습니다. 하지만 내 C의 일부 ++ 파일 (무효 *), C++ BOOL 및 꿀꺽 꿀꺽 같은 종류의 자바 데이터 타입을 전달하는 방법을 SWIGTYPE_p_int32_t 같은 유형으로 변환하는 등의 인자로 포인터를 받아 기능을 포함? 함수의 실제 프로토 타입의 예를 하나C++ 포인터를 매개 변수로 사용하여 swig 인터페이스로 처리

public static void FreeImage_Initialise(SWIGTYPE_p_int32_t load_local_plugins_only) 

꿀꺽 꿀꺽 자바 파일로 변환됩니다

DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE)); 

어떻게 자바에서 같은 값을 전달하는 등의 아래에 C++에서인가?

필자는 이러한 종류의 인수를 기능에 포함하고있는 많은 클래스가 있습니다. 거기에 어떤 방식 으로든 가능한 한 간단하게 데이터 형식을 처리하기 위해 대량 파일에 솔루션을 적용 할 수 있습니다.

도우미 함수를 만드는 방법을 하나 읽었지만 많은 C++ 클래스가 있고 각 함수에 대해 포인터를 반환하는 도우미 함수를 만드는 것이 길이 아니기 때문에 갈 수는 없습니다.

가능한 경우 다른 방법으로 제안하십시오.

답변

1

자신을 해결했다. Swig는 헤더 파일에있는 모든 typedef를 인식 할 수 없으므로 래퍼에 그런 종류의 Types를 생성하고있었습니다. 인터페이스 파일에서 다시 정의해야합니다.

+0

SWIG는 기본적으로 #include 정의로 되풀이되지 않으며 일반적으로 원하지 않습니다. SWIG에 BOOL과 같은 Windows 유형에 대해 알려주는 나의 대답을보십시오. –

0

이것은 이상한 선언 인 BOOL 유형 때문입니다.

이 경우 Java 측에서 int을 전달할 수 있습니다. 0 또는 1은 올바른 작업을 수행합니다.

또는이 라이브러리의 작은 래퍼를 만들어서 BOOL에서 bool으로 네이티브 코드로 변경할 수 있습니다. 부울 소개

+0

SWIGTYPE_p_int32_t 대신 Java 측에서 0,1을 사용할 수 없습니다. 함수가 SWIGTYPE_p_int32_t 및 void * 포인터를 반환하는 경우는 어떻습니까? – Kirtan

+0

그러나이 유형을 간단한''int''에 패치 할 수 있습니다. 함수가''void *''를 반환하면 자바에서는 그다지 할 수 없다. 그러나''int''에 저장하고''void *''를 받아 들일 수있는 네이티브 코드로 다시 전달할 수 있습니다. –

+0

나는 하나의 함수 선생님을 위해 그것을 패치 할 수 있지만, 코드 내 여러 곳에서 이러한 유형을 포함하는 써드 파티 라이브러리의 래퍼를 만들려고 노력하고있다. – Kirtan

0

, JNI가 직접위한 형의 서명을 제공하기 때문에 내가 BOOLbool을 사용하는 것이 좋습니다 대신합니다 : Z가 (당신이에서 서명을 확인할 수 있습니다 JNI Types and Data Structures) 기본 유형에 포인터 경우, 포인터에 대해

을,이 해당 서명 앞에 [을 추가하여 선언하면 int* --> [I입니다. 그것이 자신의 클래스에 대한 포인터라면, swig는 완전한 클래스를 생성 할 것입니다.

희망이 도움이됩니다.

0

SWIG는 창 유형을 알지 못합니다. 인터페이스 정의에 %include <windows.i>을 추가하십시오.