对不起我的英语,我来自法国。
我正在使用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( ¶m_names[1],1, &numPoints, &data ) != SUCCESS
如何在java中编写? java中的char**
?谢谢