0
我正在使用SWIG訪問Java中的DLL。除了將字符串值設置爲char *之外,大多數情況都可以正常工作。然後JRE將被終止。JRE在設置字符串屬性(SWIG,Java)時終止
example.h文件:
typedef struct {
char* name;
int number;
} MyStruct;
example.i:
%module example
%{
#include "example.h"
%}
%include "example.h"
的Java:
int number = MyStruct.getNumber() # works
MyStruct.setNumber(123) # works
String name = MyStruct.getName(); # works
MyStruct.setName("newName"); # crash
我也嘗試過使用字節數組:
example.i (增加):
%include "various.i"
%apply char *BYTE { char * }
的Java文件的生成工作正常,但在構建崩潰掉:
"jstring cannot convert to jbyteArray"
的包裝代碼表示:
SWIGEXPORT jbyteArray JNICALL Java_bla_VERSION_1DLL_1get(JNIEnv *jenv, jclass jcls) {
...
if (result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
有點象是一個錯誤?使用「various.i」應該沒問題,爲什麼它會用「string」而不是「NewCharArray」生成某些內容?
我正在使用VS Express 2015,SWIG 3.0.10,Java 7,x86中的所有內容。