Swig: вызов структурных указателей из Java - PullRequest
2 голосов
/ 14 февраля 2011

У меня есть следующая строка кода внутри файла c.h:

typedef struct ppr_my_struct* ppr_my_type;

Следует отметить, что ppr_my_type не определен ни в одном из файлов .h

Я создал файл swigTest.i, который ссылается на кучу файлов .h (включая файл, указанный выше). Пример показан ниже:

%module swigTest
%{
#include "C:\blah\a.h"
#include "C:\blah\b.h"
#include "C:\blah\c.h"
%}
#include "C:\blah\a.h"
#include "C:\blah\b.h"
#include "C:\blah\c.h"

Я запустил swig для автоматической генерации java-файлов. Результат "typedef struct ppr_my_struct * ppr_my_type;" показано ниже:

public class SWIGTYPE_p_p_ppr_my_struct {
  private long swigCPtr;

  protected SWIGTYPE_p_p_ppr_my_struct(long cPtr, boolean futureUse) {
    swigCPtr = cPtr;
  }

  protected SWIGTYPE_p_p_ppr_my_struct() {
    swigCPtr = 0;
  }

  protected static long getCPtr(SWIGTYPE_p_p_ppr_my_struct obj) {
    return (obj == null) ? 0 : obj.swigCPtr;
  }
}

У меня вопрос: как мне получить действительный экземпляр SWIGTYPE_p_p_ppr_my_struct для использования в моем коде Java? Если я сделаю:

SWIGTYPE_p_p_ppr_my_struct blah = new SWIGTYPE_p_p_ppr_my_struct();

он генерирует фатальное исключение, когда объект используется позже в коде (возможно потому, что я не инициализировал его, вызвав другой конструктор, с которым передается указатель). Никакие другие методы в оставшихся файлах swig java не возвращают мне экземпляр SWIGTYPE_p_p_ppr_my_struct. Что мне нужно сделать, чтобы получить действительный экземпляр?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...