2012-02-18 2 views
1

바이트 배열 (File..etc를 나타내는 바이너리 데이터)이나 문자 배열에 대한 포인터 일 수있는 unsigned char *를 반환하는 C 함수가 있습니다. 현재 SWIG %array_class을 사용하여 서명되지 않은 char 포인터를 반환하는 모든 C 함수를 래핑하고 Java 배열 유틸리티 (SampleArrayUtil.java)를 생성하여 Java 측에서 채우기 및 회수를 처리합니다.SWIG array_class를 사용하여 바이트 배열 데이터 래핑

제 문제는 unsigned char *을 사용하여 랩핑합니다. 즉, %apply char * { unsigned char * };을 사용하면 Java 측에서 String 배열을 얻을 수 있습니다. 내가 이진 데이터를 다시 가져올 때 %apply char * { unsigned char * };을 사용하여 unsigned char * 반환 값을 감싸고 싶지 않습니다. Java 측에서 바이트 배열을 원합니다. 나는 바이너리 데이터를 처리하는 또 다른 C 함수를 만드는 생각했다, 그러나 나는 또한이 unsigned char * (getValueFromRowAsByteArray 참조)

C 함수 리턴으로 새로운 기능을 포장하는 방법을 확실 해요 :

unsigned char * getValueFromRowAsStringArray(struct result_row *row, attribute_type type, int32_t *len) 

unsigned char * getValueFromRowAsByteArray(struct result_row *row, attribute_type type, int32_t *len) 
//*row* input param with data results, *type* input enum type for the data type being requested and *len* is an output param that contains the length of the data being returned. 
+0

Java 인터페이스에서 C 유형의 동일한 유형 (유형 맵핑을 선택적으로 적용하려는 경우)으로 다른 유형을 리턴하려고합니다. (답변을 작성하기 전에 우리가 같은 페이지에 있는지 확인하십시오.) – Flexo

+0

@awoodland - 맞습니다. – c12

답변

2

%module Sample 
%include "typemaps.i" 
%include "stdint.i" 
%include "arrays_java.i" 
%include "carrays.i" 
%array_class(unsigned char, SampleArrayUtil); 
%{ 
#include "C_API.h" 
%} 
%apply char * { unsigned char * }; 
%include "C_API.h" 
당신은 다른 종류의 맵을 적용 할 수 있습니다 : 서명되지 않은 숯불 * 반환 (문자의 배열) C 기능을 포장하기위한

꿀꺽 꿀꺽 인터페이스 파일 적어도 두 가지 방법으로 다른 장소의 동일한 유형으로

은 첫째로 당신은

%module test 

%include "stdint.i" 

%apply intptr_t { unsigned char * }; 
unsigned char * test1(); 

%apply char * { unsigned char * }; 
unsigned char * test2(); 

%clear unsigned char *; 
unsigned char * test3(); 

활성 타입 맵에 따라, 다른 반환 형식으로 자바의 세 가지 기능을 제공합니다 :, %apply 또는 %clear와 예컨대을 활성 타입 맵을 변경할 수 있습니다.

둘째 당신은 또한 예를 들어,하지만 더 구체적인적인 typemap을 작성할 수 있습니다

%apply long long { unsigned char * test4 }; 
%apply char * { unsigned char * test5 }; 
unsigned char * test4(); 
unsigned char * test5(); 

만 각각 test4test5 적용 -이 유형 및 함수 이름에 일치합니다. Java에서는이 결과는 다음과 같습니다.

public static long test4() { 
    return testJNI.test4(); 
    } 

    public static String test5() { 
    return testJNI.test5(); 
    } 

인수의 경우 함수 서명의 유형 및 매개 변수 이름과 유사하게 일치시킬 수 있습니다.