2012-10-11 3 views
0

swig에서 생성 된 코드를 수정할 수 있습니까? swig에서 생성 한 코드를 바꾸려고합니다. 예를swig에서 생성 된 코드 맞춤화

들어 난 다음 코드를 생성합니다

typedef struct Test { 
    char *buffer; 
} Test; 

꿀꺽 꿀꺽

를 구조체 한

SWIGEXPORT void JNICALL Java_Test_1buffer_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { 
    struct Test *arg1 = (struct Test *) 0 ; 
    char *arg2 = (char *) 0 ; 

    (void)jenv; 
    (void)jcls; 
    (void)jarg1_; 
    arg1 = (struct Test*)&jarg1; 
    arg2 = 0; 
    { 
    if (arg2) { 
     arg1->buffer= (char const *) malloc(strlen((const char *)arg2)+1); 
     strcpy((char *)arg1->buffer, (const char *)arg2); 
    } else { 
     arg1->buffer= 0; 
    } 
    } 
    if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, (const char *)arg2); 
} 

customized_strcpy 말을 다른 기능 strcpy를 대체 할 수 있습니까?

+0

생성 된 코드를 복사 할 때 파트가 누락 되었기를 바랍니다. arg2는 항상 0이됩니다. – Flexo

답변

2

memberin typemap은 표시된 코드를 담당합니다. 사용자 정의 형식 맵을 작성하여 원하는대로 strcpy을 바꿀 수 있습니다. 예 :

%module example 

%typemap(memberin) char *buffer { 
    // Keep whatever other bits of the mechanics you care about 
    if ($1) free($1); 
    if ($input) { 
    $1 = malloc(strlen($input)+1); 
    customized_strcpy($1, $input); 
    } else { 
    $1 = 0; 
    } 
} 

%inline %{ 
typedef struct Test { 
    char *buffer; 
} Test; 
%} 

원하는 코드가 생성됩니다.

관련 문제