相关疑难解决方法(0)

使用SWIG的C函数的JNI包装器 - 应该是什么类型图?

我正在尝试在C中为以下函数创建JNI包装器:

int err = new_instance(const char* name, instance_t* instance);
Run Code Online (Sandbox Code Playgroud)

name- 输入,instance- 输出

int err = get_value(const instance_t instance, int *val);
Run Code Online (Sandbox Code Playgroud)

instance- 输入,val- 输出

其中instance_t定义为:

typedef void* instance_t;
Run Code Online (Sandbox Code Playgroud)

我完全迷失在Java的SWIG手册中,因为它不仅仅支持输入参数作为输出类型.我用Python包装器没有任何问题(如下所示).

在Java的情况下使用typemap的正确方法是什么?

// instance_t [argout]
%typemap(in, numinputs=0) instance_t* instance (instance_t temp = 0) {
    $1 = &temp;
}
%typemap(argout) instance_t *instance {
    %append_output(PyLong_FromLongLong((long long)* $1));
}
// instance_t [in]
%typemap(in) instance_t instance {
    $1 = (instance_t) PyLong_AsLongLong($input);
}
Run Code Online (Sandbox Code Playgroud)

c java java-native-interface swig

12
推荐指数
1
解决办法
1186
查看次数

如何在Python中为类类型应用SWIG OUTPUT类型图?

我在使用SWIG(版本3.0.6)围绕C++库生成Python包装器时遇到了一些麻烦.

我的问题涉及应用OUTPUT类型映射,特别是在指针/类类型引用的情况下.

为了说明,这是我想要的标准类型,它的工作原理:

// .h
int add(const long arg1,const long arg2,long& resultLong);

// interface.i
%apply long& OUTPUT { long& resultLong };
int add(const long arg1,const long arg2,long& resultLong);

// projectWrapper.py
def add(arg1, arg2):
    return _projectWrapper.add(arg1, arg2)
addTerm = _projectWrapper.add

// usage
>>> result = projectWrapper.add(2, 4)
>>> print result
[0, 6L]
Run Code Online (Sandbox Code Playgroud)

您不必传入"resultLong",但它会自动附加到结果中.大!

但是,当输出类型是指向类类型的指针时,这似乎没有像我期望的那样工作:

// .h
int GetClassType(const char* name, exportedClassType*& resultPointer);

class exportedClassType
{...}

// interface.i
%apply exportedClassType*& OUTPUT { exportedClassType*& resultPointer };    
int GetClassType(const char* name, exportedClassType*& resultPointer);

// …
Run Code Online (Sandbox Code Playgroud)

c++ python swig

10
推荐指数
1
解决办法
3219
查看次数

扩展“不完整”类型(SWIG)

我正在寻找一种方法来扩展(即使用 %extend 指令向类型添加新成员)在库文件本身中定义的类型,而库的头文件仅提供该类型的前向声明。

将类型视为其定义在编译时已知,会导致以下警告:

Warning 303: %extend defined for an undeclared class [name of the type].
Run Code Online (Sandbox Code Playgroud)

有没有人知道这个问题的解决方案或解决方法?我确定有一个,因为 SWIG 的文档指出 swig 每次找到一个时都假定未知类型是结构体或联合体。

提前谢谢了!

c c++ swig language-binding interface

2
推荐指数
1
解决办法
1747
查看次数