我正在尝试使用swig包装本机C ++库,并且我一直试图将C中的time_t
转换为Java中的long
。我已成功使用swig与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 ???
我是否需要类似下面的打字机?
%typemap(jni)
%typemap(jtype)
%typemap(jstype)
我需要这个来包装像这样的C函数:
time_t manipulate_time (time_t dt);
答案 0 :(得分:9)
您应该看一下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"
答案 1 :(得分:0)
您可以简单地执行,而不是使用文字地图。
typedef long long time_t;