我正在尝试采用将 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
var:
2>c:\svn\myapi\myapi_wrap.cxx(3109): error C2071: 'temp' : illegal storage class
我试图将此变量的全局声明作为 int 添加到 swig 生成的 _wrap.cxx 文件中,但它不起作用。(显然是一种天真的方法......)。
有没有人知道我需要做什么来避免这个错误?
提前致谢!