对于通过参数返回一个函数创建一个类型映射(Create a typemap for a functi

2019-08-01 06:34发布

我将C API> Java和我有下面的函数原型。

/*
 Retrieves an individual field value from the current Line
 \param reader pointer to Text Reader object.
 \param field_num relative field [aka column] index: first field has index 0.
 \param type on completion this variable will contain the value type.
 \param value on completion this variable will contain the current field value.
 \return 0 on failure: any other value on success.
 */

extern int gaiaTextReaderFetchField (gaiaTextReaderPtr reader, int field_num, int *type, const char **value);

我想获得返回预期的状态,请返回“类型”为int和“价值”作为字符串(不被释放)

从技术文档我发现你创建一对夫妇可以保留返回值结构中。

可能有人请帮助使这第一个和我在一起?

Answer 1:

假设你的函数声明存在于一个名为header.h你可以这样做:

%module test

%{
#include "header.h"
%}

%inline %{
  %immutable;
  struct FieldFetch {
    int status;
    int type;
    char *value;
  };
  %mutable;

  struct FieldFetch gaiaTextReaderFetchField(gaiaTextReaderPtr reader, int field_num) {
    struct FieldFetch result;
    result.status = gaiaTextReaderFetchField(reader, field_num, &result.type, &result.value);
    return result;
  }
%}

%ignore gaiaTextReaderFetchField;
%include "header.h"

这隐藏的“真实” gaiaTextReaderFetchField ,而是替代返回两个输出参数,并在(不可修改)结构中的调用的结果的一个版本。

(你可以做的返回状态是0原因的异常被抛出,而不是如果你宁愿使用%javaexception ,而不是将其放置在结构中的)



文章来源: Create a typemap for a function that returns through arguments
标签: java c swig