Простой пример шрифта в Swig Java - PullRequest
5 голосов
/ 12 мая 2010

Я пытаюсь обернуть нативную библиотеку C ++, используя swig, и застрял при попытке конвертировать time_t в C в long в Java Я успешно использовал swig с python, но пока не могу заставить приведенную выше карту типов работать на Java. В питоне это выглядит так

%typemap(in) time_t
{
    if (PyLong_Check($input))
        $1 = (time_t) PyLong_AsLong($input);
    else if (PyInt_Check($input))
        $1 = (time_t) PyInt_AsLong($input);
    else if (PyFloat_Check($input))
        $1 = (time_t) PyFloat_AsDouble($input);
    else {
        PyErr_SetString(PyExc_TypeError,"Expected a large number");
        return NULL;
    }
}

%typemap(out) time_t
{
    $result = PyLong_FromLong((long)$1);
}

Я предполагаю, что в карте от Java до C будет:

%typemap(in) time_t {
    $1 = (time_t) $input;
}

Как мне завершить карту с C на Java?

%typemap(out) time_t ???

Нужны ли мне такие наборы, как приведенные ниже?

%typemap(jni) 
%typemap(jtype) 
%typemap(jstype) 

Мне нужно это для того, чтобы обернуть функции C следующим образом:

time_t manipulate_time (time_t dt);

Ответы [ 2 ]

9 голосов
/ 14 мая 2010

Вы должны взглянуть на следующие разделы документации Swig:

В основных типографских картах также много "примеров", которые реализованы для примитивных типов. Вы можете найти их в \ swig \ Lib \ java \ java.swg
Я не знаю, работает ли это или нет, но, может быть, что-то подобное подойдет вам?

%typemap(jni) time_t "jlong"
%typemap(jtype) time_t "long"
%typemap(jstype) time_t "long"

%typemap(out) time_t %{ $result = (jlong)$1; %}
%typemap(in) time_t "(time_t)$input"
0 голосов
/ 14 мая 2015

Вы можете просто сделать вместо использования типографских карт.

typedef long long time_t;
...