1

メインヘッダーファイルでswigを使用するアプローチをとろうとしています。これを行うとswigが機能するように見えますが、いくつかの問題に遭遇しました。ここstackoverflowで最初の質問をしましたが、まだ成功していませんが、続行するように励まされるほど十分な進歩を遂げました...

さて、ここに私のインターフェースファイルがあります:

/* File : myAPI.i */
%module myAPI

%{
#include "stdafx.h"
#include <boost/algorithm/string.hpp>
... many other includes ...
#include "myAPI.h"
#include <boost/algorithm/string/predicate.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
using boost::format;
using namespace std;
using namespace boost::algorithm;
using namespace boost::serialization;
%}

/* Let's just grab the original header file here */
%include "myAPI.h"

私が知る限り、swig は問題なく動作します。ただし、生成されたコードでは、次のような多数の定義が生成されます。

SWIGINTERN int Swig_var_ModState_set(PyObject *_val) {
  {
    void *argp = 0;
    int res = SWIG_ConvertPtr(_val, &argp, SWIGTYPE_p_MY_API,  0  | 0);
    if (!SWIG_IsOK(res)) {
      SWIG_exception_fail(SWIG_ArgError(res), "in variable '""ModState""' of type      '""MY_API""'");
    }
    if (!argp) {
      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in variable    '""ModState""' of type '""MY_API""'");
    } else {
      MY_API * temp;
      temp  = reinterpret_cast< MY_API * >(argp);
      ModState = *temp;
      if (SWIG_IsNewObj(res)) delete temp;
    }
  }
  return 0;
fail:
  return 1;
}

Visual Studio 2010 では、これらのコード ブロックごとにエラーが発生します。エラーは変数に基づいていますtemp:

2>c:\svn\myapi\myapi_wrap.cxx(3109): error C2071: 'temp' : illegal storage class

この変数のグローバル宣言を int として swig で生成された _wrap.cxx ファイルに追加しようとしましたが、うまくいきませんでした。(明らかに素朴なアプローチです...)。

このエラーを回避するために何をする必要があるかについて、誰かが洞察を持っていますか?

前もって感謝します!

4

0 に答える 0