我已经google了很长时间,没有任何帮助。
编辑:这是实施technomage建议后的代码。
示例struct C ++代码:
typedef struct _SOMESTRUCT{
const char* String1;
const char* String2;
} SOMESTRUCT, *LPSOMESTRUCT;
用数据“填满”结构的示例C ++函数:
int GetSomeStruct(_SOMESTRUCT somes);
struct to java的翻译:
public class SomeStruct extends Structure{
public String String1;
public String String2;
public class ByValue extends SomeStruct implements Structure.ByValue{}
public SomeStruct(Pointer p){ //constructors of struct
super(p);
read();
}
public SomeStruct(){
super();
read();
}
}
将函数转换为java方法:
int GetSomeStruct(SomeStruct.ByValue structref);
我如何从主Java应用程序执行代码:
EnclosingClass.SomeStruct sstruct = enclosingInstance.new SomeStruct();
EnclosingClass.SomeStruc.ByValue sstructval = sstruct.new ByValue();
enclosingInstanceofClasswithTranslatedCfunctions.GetSomeStruct(sstructref);
假设:
答案 0 :(得分:1)
您的原生声明按值传递结构。以下声明是等效的:
int GetSomeStruct(struct _SOMESTRUCT somes);
int GetSomeStruct(SOMESTRUCT somes);
您需要定义Java映射以显式接受实现Structure.ByValue
接口的参数。 JNA默认采用struct*
,因此您需要使用明确的ByValue
用法来表明您想要不同的内容。
public class MyStruct extends Structure {
public class ByValue extends MyStruct implements Structure.ByValue { }
}
SOMESTRUCT
是typedef
struct _SOMESTRUCT
,这是引用struct
的最基本方式。两者都是类型说明符,可以互换使用。 _SOMESTRUCT
通常被称为"标记"对于前面的结构定义。