【发布时间】:2015-04-10 21:33:10
【问题描述】:
我用谷歌搜索了很长时间,没有任何帮助。
编辑:这是实施 technomage 建议后的代码。
结构 C++ 代码示例:
typedef struct _SOMESTRUCT{
const char* String1;
const char* String2;
} SOMESTRUCT, *LPSOMESTRUCT;
用数据“填充”结构的示例 C++ 函数:
int GetSomeStruct(_SOMESTRUCT somes);
struct 到 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);
假设:
- 在尝试使用该功能之前,我已正确执行 Native.loadLibrary。 (返回整数的简单函数和接收事件通知的回调函数一样工作正常)
- Java 翻译都位于单独的文件中(如在 c 代码中),嵌套在扩展 JNA 库的公共类中。
- 如果一切都在 c 端执行良好,则 GetSomeStruct 返回的 int 为零。我一直在归零。
【问题讨论】: