2015-01-24 2 views
0

Swig를 사용한 이후로 꽤 오래되었습니다. 따라서 이것은 아마도 바보 같은 실수입니다.Swig Ruby "TypeError : int * 유형의 예상 인수 0이지만 Fixnum이 0입니다."

swig를 사용하여 함수 집합에 대한 인터페이스를 만들었지 만 올바르지 않은 것이 있습니다. 예를 들어, C에서 (int *)를 기대하는 함수를 호출하려고하면 위의 오류가 발생합니다. 내가 뭘 잘못하고 있니?

나는 꿀꺽 꿀꺽 사용하여 실행 2.0.11-1ubuntu2

swig -ruby -module itkDB itkDB.i 

내 인터페이스 파일이었다

%module itkDB 
%{ 
#include "itkDB.h" 
%} 
// with an included copy of the itkDB.h file 

헤더는 다음과 같은 선언이 포함되어

CDS_EXTERN_C String 
dbiInit(int *pArgc, 
    char *pArgv[]); 

내가 위의 오류를 irb 세션에서이 작업을 시도하면 :

ItkDB.dbInit 0, "blah" 

생성 된 래퍼 함수는 다음과 같습니다

SWIGINTERN VALUE 
_wrap_dbiInit(int argc, VALUE *argv, VALUE self) { 
    int *arg1 = (int *) 0 ; 
    char **arg2 ; 
    void *argp1 = 0 ; 
    int res1 = 0 ; 
    void *argp2 = 0 ; 
    int res2 = 0 ; 
    String result; 
    VALUE vresult = Qnil; 

    if ((argc < 2) || (argc > 2)) { 
    rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; 
    } 
    res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_int, 0 | 0); 
    if (!SWIG_IsOK(res1)) { 
    SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError("", "int *","dbiInit", 1, argv[0])); 
    } 
    arg1 = (int *)(argp1); 
    res2 = SWIG_ConvertPtr(argv[1], &argp2,SWIGTYPE_p_p_char, 0 | 0); 
    if (!SWIG_IsOK(res2)) { 
    SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError("", "char *[]","dbiInit", 2, argv[1])); 
    } 
    arg2 = (char **)(argp2); 
    result = (String)dbiInit(arg1,arg2); 
    vresult = SWIG_FromCharPtr((const char *)result); 
    return vresult; 
fail: 
    return Qnil; 
} 

답변

0

이 간단한 문제였다 예상대로. 다음은 인터페이스 파일에 추가되어 문제가 해결되었습니다. 이것은 실제로 라이브러리가 정수에 대한 참조를 원했던 몇 안되는 경우 중 하나였습니다. * INPUT은 swig에게 함수에 일반 정수가 전달되도록 허용 한 다음 전달 된 정수에 대한 참조를 생성하고 함수에 보냅니다.

CDS_EXTERN_C String 
dbiInit(int *INPUT, 
    char *pArgv[]); 
관련 문제