1 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
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++邊)我們有“相同”的結(jié)構(gòu)。
typedef struct data {
? int field;
}?
JavaScala 通過“鏈接”基于類、JNA基于本機(jī)代碼的調(diào)用以及本機(jī)代碼本身,將所有這些內(nèi)容綁定在一起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結(jié)構(gòu)和C++結(jié)構(gòu)之間的類型匹配。
添加回答
舉報(bào)