为什么我收到 Warning(453) Cant apply (char *STRING, int LENGTH) no typemaps are defined

Why I'm getting Warning(453) Cant apply (char *STRING, int LENGTH) no typemaps are defined

我正在尝试从 java 代码调用 c 函数。 我在 ubunto 下使用 swig(版本 1.3.40)和 运行。

我的界面文件看起来:

%module test
%include "typemaps.i"
%apply(char *STRING, int LENGTH) {(char* pchInput, int inputSize)};
%{
#include "example.h"
%}
void testFunc(char* pchInput, int inputSize);

我得到以下 wanning/error: 警告(453):无法应用(char *STRING,int LENGTH)。没有定义类型映射。

以下链接对我没有帮助:

SWIG: Warning 453: Can't apply

SWIG: No typemaps are defined

Swig typemap java object

您需要在使用 %include 包含 header 之前应用您的类型映射,并且您应该从常规的 #include

开始
%module test
%{
  #include "example.h"
%}
%include "typemaps.i"
%apply(char *STRING, int LENGTH) {(char* pchInput, int inputSize)};
%include "example.h"

其中 example.h 包含您的函数声明。试试这个

奇怪。

我用当前的 swig 3.0.7 尝试了你上面的例子(称之为 test.i 并使用 swig -java test.i)并且它工作正常。此外,您不需要 %include "typemaps.i" 也能正常工作。但是据我所知这也应该适用于(古老的)swig 1.3.40.