JavaCPP提供了在Java中高效访问本地C++的方法。采用JNI技术实现,支持所有Java实现包括Android系统,Avian 和 RoboVM。
JavaCPP提供了一系列的Annotation将Java代码映射到C++代码,并使用一个可执行的jar包将C++代码转化为可以从JVM内调用的动态链接库文件。
Maven:
<dependency> <groupId>org.bytedeco</groupId> <artifactId>javacpp</artifactId> <version>0.11</version> </dependency>
使用方法:
C++:
#include <string> namespace LegacyLibrary { class LegacyClass { public: const std::string& get_property() { return property; } void set_property(const std::string& property) { this->property = property; } std::string property; }; }
Java:
import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; @Platform(include="LegacyLibrary.h") @Namespace("LegacyLibrary") public class LegacyLibrary { public static class LegacyClass extends Pointer { static { Loader.load(); } public LegacyClass() { allocate(); } private native void allocate(); // to call the getter and setter functions public native @StdString String get_property(); public native void set_property(String property); // to access the member variable directly public native @StdString String property(); public native void property(String property); } public static void main(String[] args) { // Pointer objects allocated in Java get deallocated once they become unreachable, // but C++ destructors can still be called in a timely fashion with Pointer.deallocate() LegacyClass l = new LegacyClass(); l.set_property("Hello World!"); System.out.println(l.property()); } }
JNA实际上是基于JNI封装的,其在应用的时候更加方便,但效率相对低,主要适合对实时性要求不高的场合。JNI虽然效率高,但是应用不方便。JavaCPP提供了在Java中高效访问本地C++的方法。采用JNI技术实现,支持包括Android系统在内的所有Java实现。 在本例中,DLL源代码进行了一些修改,用一个TAdd.h表示所有代码,更加简单了: namespace TAdd {
本文旨在帮助理解JavaCV, JavaCPP,和JavaCPP Presets之间的关系 JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了ffmpeg、OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口,可以通过其中的utility类方便的在包括Android在内的Java平台上调用这
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 org.bytedeco javacpp-presets 1.5.6-SNAPSHOT pom JavaCPP Presets The missing bridge between Java a
https://github.com/bytedeco/javacpp#introduction https://github.com/bytedeco/javacpp-presets —————————————————————————————————————————————————————————————————————————————————— Introduction JavaCPP pro
1. Java 与 FFMPEG FFMPEG 是一个广泛用于媒体处理的库,在Java的世界里,处理视频的能力相当弱,于是有很大需求需要Java 调用 FFMPEG。 Java 调用C 的方式有很多,可以用最原始的JNI方式,也可以JNA方式,还可以是命令行。 采用命令行的方式比较简单,不过有很大局限性,尤其是涉及到 视频的处理和分析的时候,比如要取出某个packet,然后进行处理。 这里介绍
文件名大小更新时间 javacpp02018-01-15 javacpp\src02014-12-24 javacpp\src\test02015-08-01 javacpp\src\test\resources02015-08-01 javacpp\src\test\resources\org02015-08-01 javacpp\src\test\resources\org\bytedeco0
配置liunx 环境系统 配置so 文件存放路径 [root@arch2 ~]# cat /etc/ld.so.conf.d/so.conf /opt/app/tools/so/ 从新调用ldconfig 命令 ldconfig 配置java 项目 配置pom 文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m
?这个东西也太神了吧,一键生成java文件,自己写好c++和配置类就行了。 然后另一个需求是c++三方库,比如<eigen>啥的,这种东西也可以直接加在include path里,感觉无敌了。 首先我们写一个配置类 import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; import org.bytedeco
我只想测试JAVACPP并尝试从我的eclipse中的网页开始的第一个例子: 我输入时: javac -cp libs \ javacpp.jar: . SRC \ LegacyLibrary.java 进入命令行我收到以下错误信息: src \ LegacyLibrary.java:1:错误:包com.googlecode.javacpp不存在import com.googlecode.java
本文向大家介绍C# httpwebrequest访问HTTPS错误处理方法,包括了C# httpwebrequest访问HTTPS错误处理方法的使用技巧和注意事项,需要的朋友参考一下 C# httpwebrequest访问HTTPS链接时遇到这个错误,但是如果我开抓包工具,比如filddler2,则POST返回正常 错误提示的Message为: 基础连接已经关闭: 发送时发生错误。 InnerEx
本文向大家介绍浅析C++中boost.variant的几种访问方法,包括了浅析C++中boost.variant的几种访问方法的使用技巧和注意事项,需要的朋友参考一下 Boost.Variant Variant库包含一个不同于union的泛型类,用于在存储和操作来自于不同类型的对象。这个库的一个特点是支持类型安全的访问,减少了不同数据类型的类型转换代码的共同问题。 Variant 库如何改进你的程
本文向大家介绍C#访问SQL Server数据库的实现方法,包括了C#访问SQL Server数据库的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#访问SQL Server数据库的实现方法。分享给大家供大家参考。具体如下: 这里介绍一下用C#访问SQL Server数据库。这里要涉及到几个类:SqlConnection类、SqlCommand类、SqlDataReader类。
模式定义 表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。 class Visitor; class Element { public: virtual void accept(Visitor& visitor) = 0; //第一次多态辨析 virtual ~Element() {} }; class Eleme
在上一节中,我们已经看到当目标用户重新启动计算机时,我们就会失去连接。我们使用了一个普通的后门程序,这就是为什么当计算机重新启动时,后门程序将被终止,进程将被终止,我们将失去连接。但在本节中,我们将讨论如何维持对目标计算机的访问的方法。我们将使用之前创建的普通HTTP反向Mterepreter不可检测的后门。将它作为一项服务注入,以便每次目标用户运行他们的计算机时它都会运行,它会尝试以一定的间隔连
主要内容:直接访问,索引访问文件访问方法 看看访问存储在辅助存储器中的文件的各种方法。 顺序访问 大多数操作系统按顺序访问文件。 换句话说,可以说大多数文件需要由操作系统按顺序访问。 在顺序访问中,操作系统逐字读取文件。 维护一个指针,该指针最初指向文件的基地址。 如果用户想要读取文件的第一个字,那么指针将该字提供给用户并将其值增加1个字。 这个过程一直持续到文件结束。 现代文字系统确实提供了直接访问和索引访问的概念,但最常
问题内容: 只是一个简单的问题:是否可以从c / c ++调用Java函数? 问题答案: 是的,你可以,但是它有点令人费解,并且以反射/非类型安全的方式工作(示例使用的C ++ API比C版本更干净)。在这种情况下,它将从C代码中创建Java VM的实例。如果首先从Java调用你的本机调用,则无需构造VM实例 编译(在Ubuntu上): 注意:为了实现正确的错误处理,应检查每种方法的返回代码(为方
问题内容: 我试图访问C中的击键。我可以访问字母数字键。如何访问,并重点? 另外,我读过某个地方,有时在控制台中输入文本时,操作系统会掩盖退格键。我想知道用户在哪里按退格键。这与知道何时按下’\ n’并不相同。GNU C.Ubuntu 11。 问题答案: Dietrich Epp在评论中回答:使用 ncurses 库。 您可能会制作一个X11客户端图形应用程序;在这种情况下,请使用图形工具包库,例