1 回答
TA贡献1830条经验 获得超9个赞
package recipeNo057;
import com.sun.jna.Library;
import com.sun.jna.WString;
import com.sun.jna.Native;
import com.sun.jna.Structure;
@Structure.FieldOrder({ "field" })
public class Data extends Structure {
public static class ByValue extends Data implements Structure.ByValue { }
public static class ByReference extends Data implements Structure.ByReference { }
public volatile int field;
}
在另一边(C++边)我们有“相同”的结构。
typedef struct data {
int field;
}
JavaScala 通过“链接”基于类、JNA基于本机代码的调用以及本机代码本身,将所有这些内容绑定在一起C++。
trait HelloWorld extends Library {
def GetData(m: WString) : Data.ByValue;
}
object HelloJNA {
def main(args:Array[String]):Unit = {
val libc = Native.load( "HelloWorld", classOf[HelloWorld] )
var result = libc.GetData( new WString("I am passing String!") )
println("Result: " + result.field);
}
}
笔记
重要的是要注意Java结构和C++结构之间的类型匹配。
添加回答
举报