gpt4 book ai didi

java - 自定义 swig 生成的代码

转载 作者:行者123 更新时间:2023-12-02 07:31:36 26 4
gpt4 key购买 nike

是否可以修改 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

最佳答案

成员类型映射负责您所显示的代码。您可以通过编写自定义类型映射来替换 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;
%}

它会生成您想要的代码。

关于java - 自定义 swig 生成的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com