0

是否可以修改 swig 生成的代码?我想替换 swig 生成的代码。例如

我有结构

typedef struct Test {
  char *buffer;
} Test;

Swig 将创建以下代码

SWIGEXPORT void JNICALL Java_Test_1buffer_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
  struct Test *arg1 = (struct Test *) 0 ;
  char *arg2 = (char *) 0 ;

  (void)jenv;
  (void)jcls;
  (void)jarg1_;
  arg1 = (struct Test*)&jarg1; 
  arg2 = 0;
  {
    if (arg2) {
      arg1->buffer= (char const *) malloc(strlen((const char *)arg2)+1);
      strcpy((char *)arg1->buffer, (const char *)arg2);
    } else {
      arg1->buffer= 0;
    }
  }
  if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, (const char *)arg2);
}

是否可以strcpy用其他功能代替customized_strcpy

4

1 回答 1

2

memberin 类型映射负责您显示的代码。您可以通过编写自定义类型映射来替换strcpy您想要的。例如:

%module example

%typemap(memberin) char *buffer {
  // Keep whatever other bits of the mechanics you care about 
  if ($1) free($1);
  if ($input) {
    $1 = malloc(strlen($input)+1);
    customized_strcpy($1, $input);
  } else {
    $1 = 0;
  }
}

%inline %{
typedef struct Test {
  char *buffer;
} Test;
%}

这会生成您想要的代码。

于 2012-10-12T20:38:02.417 回答