无法实例化类

时间:2014-12-29 14:30:18

标签: java c# struct structure jna

我在我的java代码中使用了一个C#dll库,这个库函数是使用jna调用的,这些函数的一些参数包含Structs,要在Java中创建一个等效参数,我必须创建一个{ {1}}继承static abstract class类,它必须包含我试图创建等价的结构中存在的所有变量,以获得更多说明:

C#中的

Structure

并且有一个类似的功能:

struct SDK_AutoConfig {
    int iDay;       
    int iHour;          
    int isec;       
};

所以,在Java中调用这样的函数:

run_auto_config(int x, SDK_AutoConfig auto)

告诉这里一切正常,但当另一个// Declaring the Struct public static abstract class SDK_AutoConfig extends Structure{ public int iDay; public int iHour; public int isec; } // Instantiating it SDK_AutoConfig auto = new SDK_AutoConfig() { @Override protected List getFieldOrder() { List<Object> list = new ArrayList<>(); return list; } }; // And to call the function run_auto_config(65, auto); 被声明为变量 struct the SDK_AutoConfig时,我无法处理我首先尝试的是定期通过它:

struct

但是当我这样做时,我得到:

  

public static abstract class SDK_AutoConfig extends Structure{ public int iDay; public int iHour; public int isec; public OTHER_STRUCT struct_two; }

所以,我尝试先将其实例化,然后将其传递给Exception in thread "main" java.lang.IllegalArgumentException: Invalid Structure field in class Test$1, field name 'struct_two' (class Test$SDK_AutoConfig$OTHER_STRUCT): Can't instantiate class Test$SDK_AutoConfig$OTHER_STRUCT (java.lang.InstantiationException)的构造函数:

SDK_AutoConfig

但我得到了同样的异常。那么,如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

将您的匿名实例创建代码移至Structure班级,然后移除abstract修饰符。然后你可以根据需要嵌套不同的结构。

对于C#DLL导出的API,只要你的方法声明用extern "C"修饰并且只使用C结构,它们就应该以兼容的方式导出,因此可以被JNA使用。

相关问题