栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使Swig正确包装在C中修改为Java Something-other-other的char *缓冲区?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使Swig正确包装在C中修改为Java Something-other-other的char *缓冲区?

感谢托马斯的正确指导。解决方案是创建一个使用StringBuffer的自定义类型映射,以将结果返回。我

examples/java/typemap
在SWIG安装目录中找到了代码。在搜索之前,我一定忽略了这一点。

我已在下面附加了示例代码,目前正在使用建议的替代方法。但是,使用BYTE类型映射的第一种方法可能需要对Java代码进行一些更改,但从长远来看实际上可能更有意义。

感谢您的帮助,现在我可以看看我是否可以接受自己的答案…

%module example%{void f1(char *s) {  if(s != NULL) {    sprintf(s, "hello world");  }}void f2(char *s) {  f1(s);}void f3(char *s) {  f1(s);}%}void f1(char *s);%include various.ivoid f2(char *BYTE);%typemap(jni) char *SBUF "jobject"%typemap(jtype) char *SBUF "StringBuffer"%typemap(jstype) char *SBUF "StringBuffer"%typemap(in) char *SBUF {  $1 = NULL;  if($input != NULL) {        jmethodID setLengthID;    jclass sbufClass = (*jenv)->GetObjectClass(jenv, $input);    jmethodID toStringID = (*jenv)->GetMethodID(jenv, sbufClass, "toString", "()Ljava/lang/String;");    jstring js = (jstring) (*jenv)->CallObjectMethod(jenv, $input, toStringID);        const char *pCharStr = (*jenv)->GetStringUTFChars(jenv, js, 0);        jmethodID capacityID = (*jenv)->GetMethodID(jenv, sbufClass, "capacity", "()I");    jint capacity = (*jenv)->CallIntMethod(jenv, $input, capacityID);    $1 = (char *) malloc(capacity+1);    strcpy($1, pCharStr);        (*jenv)->ReleaseStringUTFChars(jenv,  js, pCharStr);        setLengthID = (*jenv)->GetMethodID(jenv, sbufClass, "setLength", "(I)V");    (*jenv)->CallVoidMethod(jenv, $input, setLengthID, (jint) 0);  }}%typemap(argout) char *SBUF {  if($1 != NULL) {        jstring newString = (*jenv)->NewStringUTF(jenv, $1);    jclass sbufClass = (*jenv)->GetObjectClass(jenv, $input);    jmethodID appendStringID = (*jenv)->GetMethodID(jenv, sbufClass, "append", "(Ljava/lang/String;)Ljava/lang/StringBuffer;");    (*jenv)->CallObjectMethod(jenv, $input, appendStringID, newString);        free($1);    $1 = NULL;  }  }%typemap(freearg) char *SBUF ""%typemap(javain) char *SBUF "$javainput"void f3(char *SBUF);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号