如何为SWIG创建接口文件

时间:2012-10-04 08:54:03

标签: c swig

我有以下头文件: gaiageo.h  其定义为

#ifndef DOXYGEN_SHOULD_SKIP_THIS
/* stdio.h included for FILE objects. */
#include <stdio.h>
#ifdef DLL_EXPORT
#define GAIAGEO_DECLARE __declspec(dllexport)
#else
#define GAIAGEO_DECLARE extern
#endif
#endif

#ifndef _GAIAGEO_H
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define _GAIAGEO_H
#endif

#include "gg_const.h"
#include "gg_structs.h"
#include "gg_core.h"
#include "gg_mbr.h"
#include "gg_formats.h"
#include "gg_dynamic.h"
#include "gg_advanced.h"

#endif /* _GAIAGEO_H */

包含的头文件包含GAIAGEO_DECLARE,用于 实例gg_formats.h(这是包含的标头中非常典型的)具有以下内容:

/**
\file gg_formats.h

Geometry handling functions: formats
*/

#ifndef _GG_FORMATS_H
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define _GG_FORMATS_H
#endif

#ifdef __cplusplus
extern "C"
{
#endif

/* function prototypes */

/**
 Test CPU endianness

 \return 0 if big-endian: any other value if little-endian
 */
    GAIAGEO_DECLARE int gaiaEndianArch (void);

/**
 Import an INT-16 value in endian-aware fashion

 \param p endian-dependent representation (input buffer).
 \param little_endian 0 if the input buffer is big-endian: any other value
 for little-endian.
 \param little_endian_arch the value returned by gaiaEndianArch()

 \return the internal SHORT value 

 \sa gaiaEndianArch, gaiaExport16

 \note you are expected to pass an input buffer corresponding to an
 allocation size of (at least) 2 bytes.
 */
    GAIAGEO_DECLARE short gaiaImport16 (const unsigned char *p,
                    int little_endian,
                    int little_endian_arch);
#ifdef __cplusplus
}
#endif

#endif  /* _GG_FORMATS_H */

这是我第一次尝试创建界面文件,想要一些帮助,在线文档让我感到困惑吗?

我应该为每个标题创建一个接口文件吗?我应该如何为包含gaiageo.h创建接口?

1 个答案:

答案 0 :(得分:3)

这应该让你开始,但很难确切知道你需要什么。

%include <windows.i>使SWIG处理像__declspec(dllexport)这样的Window-isms。

默认情况下,SWIG不会递归包含文件,因此请包含您需要SWIG处理的文件。有一个recurse的开关,但它会处理stdio.h

%module gaiageo

%{
#include "gaiageo.h"
%}

%include <windows.i>
%include "gaiageo.h"
%include "gg_const.h"
%include "gg_structs.h"
%include "gg_core.h"
%include "gg_mbr.h"
%include "gg_formats.h"
%include "gg_dynamic.h"
%include "gg_advanced.h"

将其保存为gaiageo.i文件并运行类似:

swig -c++ -<target_language> gaiageo.i