java jna问题结构访问内存无效
对不起我的英语,我来自法国 我正在用java开发一个工具,我使用JNA调用C代码 我对函数进行了编码,它有以下错误:java jna问题结构访问内存无效,java,c,jna,Java,C,Jna,对不起我的英语,我来自法国 我正在用java开发一个工具,我使用JNA调用C代码 我对函数进行了编码,它有以下错误: Exception in thread "main" java.lang.Error: Invalid memory access at com.sun.jna.Native.invokeInt(Native Method) at com.sun.jna.Function.invoke(Function.java:383) at com.sun.jna.F
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokeInt(Native Method)
at com.sun.jna.Function.invoke(Function.java:383)
at com.sun.jna.Function.invoke(Function.java:315)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
at $Proxy0.light(Unknown Source)
at ApicallIn.getpar.main(getpar.java:285)
我使用了几个函数,所有函数都工作,但其中一个有结构,该结构的编码如下:
typedef struct {
double a_value;
double b_value;
int ctatus;
} iPoint_Struct;
我必须使用以下函数:
int light( char **light_names, int num_light, int **num_points, iPoint_Struct ***datalightlist);
Java:
public static class iPoint_Struct extends Structure {
public iPoint_Struct() {}
public iPoint_Struct(Pointer pointer){
super(pointer);
read();
}
public List<? > getFieldOrder() {
return Arrays.asList("a_value", "b_value", "ctatus");
}
public static class sByValue extends getpar.iPoint_Struct implements Structure.ByValue {};
public double a_value;
public double b_value;
public int ctatus;
public static class sByReference extends getpar.iPoint_Struct implements Structure.ByReference {};
}
运行该函数时,出现以下错误:
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokeInt(Native Method)
at com.sun.jna.Function.invoke(Function.java:383)
at com.sun.jna.Function.invoke(Function.java:315)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
at $Proxy0.light(Unknown Source)
at ApicallIn.getpar.main(getpar.java:285)
char**
的用法如下:
param_names= (char ) malloc( 3000* sizeof( char * ) );
for( i = 0; i < 3000; i++ ) {
param_names[i] = GetName( i );
fprintf( stderr, "%s\n", param_names[i] ); } if( light( ¶m_names[1],1, &numPoints, &data ) != SUCCESS
param_names=(char)malloc(3000*sizeof(char*);
对于(i=0;i<3000;i++){
参数名称[i]=GetName(i);
fprintf(stderr,“%s\n”,param_names[i])if(light(¶m_names[1],1,&numPoints,&data)!=SUCCESS
如何用java编写?
char**
用java编写?谢谢如果我正确阅读了您的声明,light
正在“返回”指向struct*
数组的指针,因此在尝试提取数据时,您可能错误地初始化了JavaStructure
实例。您认为Java中的代码是正确的吗?我可以用Java将字符**写为字符串吗?char**
在Java中不是String
。它可能是本机strin的数组g、 或者指向指针的指针,具体取决于它的使用方式。如果参数名
是一个本机字符串数组,那么传入一个Java字符串数组
;JNA将自动为您转换为字符*
数组,甚至在最后抛出一个空值。感谢您的回答,在c中字符**的用法如下这是:param_names=(char)malloc(3000*sizeof(char*);for(i=0;i<3000;i++){param_names[i]=GetName(i);fprintf(stderr,“%s\n”,param_names[i]);if(light(¶m_names[1],1,&numPoints,&data)!=SUCCESS)…我能用java写char做些什么?谢谢更新你的问题。
param_names= (char ) malloc( 3000* sizeof( char * ) );
for( i = 0; i < 3000; i++ ) {
param_names[i] = GetName( i );
fprintf( stderr, "%s\n", param_names[i] ); } if( light( ¶m_names[1],1, &numPoints, &data ) != SUCCESS