是否可以修改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
?
答案 0 :(得分:2)
memberin typemap负责您显示的代码。您可以通过编写自定义类型映射来替换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;
%}
生成您想要的代码。