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++結構之間的類型匹配。
添加回答
舉報