Простой typemap пример в большом глотке Java

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

%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 ???

Мне был бы нужен typemaps как те ниже?

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

Мне нужно это для обертывания функций C как это:

time_t manipulate_time (time_t dt);
5
задан dzhelil 12 May 2010 в 04:00
поделиться

1 ответ

Вам стоит взглянуть на эти разделы документации swig:

В базовых typemaps также есть много "примеров", которые реализованы для примитивных типов. Вы можете найти их в \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"
9
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: