java jna probleme结构无效的访问内存

时间:2014-03-14 10:25:53

标签: 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.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 {};

        }

功能:

if(libe.light( String param_names, int num_params, IntByReference num_points, PointerByReference data_lists )==1){
System.out.println("Ok")
}

当我运行该函数时,我收到以下错误:

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( &param_names[1],1, &numPoints, &data ) != SUCCESS 

如何在java中编写? java中的char**?谢谢

0 个答案:

没有答案