当前位置: 首页 > 科技观察

Java访问C++方法JavaCPP

时间:2023-03-12 01:30:44 科技观察

JavaCPP提供了对Java中原生C++方法的高效访问。采用JNI技术实现,支持包括Android系统、Avian、RoboVM在内的所有Java实现。JavaCPP提供了一系列的Annotations将Java代码映射到C++代码,并使用一个可执行的jar包将C++代码转换成JVM内部可以调用的动态链接库文件。Maven:org.bytedecojavacpp0.11使用方法:C++:#includenamespaceLegacyLibrary{classLegacyClass{public:conststd::string&get_property(){returnproperty;}voidset_property(conststd::string&property){this->property=property;}std::stringproperty;};}Java:importorg.bytedeco.javacpp.*;importorg.bytedeco.javacpp.annotation.*;@Platform(include="LegacyLibrary.h")@Namespace("LegacyLibrary")publicclassLegacyLibrary{publicstaticclassLegacyClassextendsPointer{static{Loader.load();}publicLegacyClass(){allocate();}privatenativevoidallocate();//tocallthegetterandsetterfunctionspublicnative@StdStringStringget_property();publicnativevoidset_property(Stringproperty);//直接访问成员变量publicnative@StdStringStringproperty();publicnativevoidproperty(Stringproperty);}publicstaticvoidmain(String[]args){//PointerobjectsallocatedinJavagetdeallocatedoncetheybecomeunreachable,//butC++destructorscanstillbecalledintimelyfashionwithPointer.deallocate()LegacyClassl=newLegacyClass();l.set_property("HelloWorld!");System.out.println(l.property());}}