jni没用过,接触一下jna
如果在windows下
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
public class HelloWorld {
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);
void printf(String format, Object... args);
}
public static void main(String[] args) {
CLibrary.INSTANCE.printf("in windows\n");
for (int i = 0; i < args.length; i++) {
CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
}
}
}
如果在linux下
顺便把c复习一下,准备做一个testadd的动态库,先测一下动态库是否好使,
先写3个文件test.h test.c testadd.c
test.h
#include <stdio.h>
void add();
test.c
#include <stdio.h>
#include "test.h"
int main()
{
printf("haha\n");
add();
}
testadd.c
#include <stdio.h>
#include <unistd.h>
void add()
{
char name[65];
printf("this is add \n");
gethostname(name, sizeof(name));
printf("hostname=%s\n",name);
system("ls");
}
生成libtestadd.so
测试一下是否好使
[root@redhat5 c]# gcc -fpic -shared -o libtestadd.so testadd.c
[root@redhat5 c]# gcc -o test test.c -I. -L. -ltestadd
[root@redhat5 c]# ./test
(有写系统可能会报错,比如fedora16,如果报./test: error while loading shared libraries: libtestadd.so: cannot open shared object file: No such file or directory,需要设置一下 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:当前跑程序的目录就可以了)
haha
this is add
hostname=122226
a.out libtestadd.so TestAddService.class test.h
biji.txt main.c TestAddService.java y.tab.c
JNA.chm test TestAddService$TestAdd.class
jna.jar testadd.c test.c
[root@redhat5 c]#
yeh,"this is add"是libtestadd.so打印的,
现在用jna调用libtestadd.so
把jna.jar放到这个目录下
编写TestAddService.java
import com.sun.jna.Library;
import com.sun.jna.Native;
public class TestAddService {
public TestAddService() {
}
public interface TestAdd extends Library {
TestAdd INSTANCE = (TestAdd) Native.loadLibrary("testadd",TestAdd.class);
public void add();
}
public static void main(String[] args) {
TestAdd.INSTANCE.add();
System.out.println("哦 yeh yeh jna in linux");
}
}
[root@redhat5 c]# javac -cp .:jna.jar TestAddService.java
[root@redhat5 c]# java -cp .:jna.jar TestAddService
this is add
hostname=122226
a.out libtestadd.so TestAddService.class test.h
biji.txt main.c TestAddService.java y.tab.c
JNA.chm test TestAddService$TestAdd.class
jna.jar testadd.c test.c
哦 yeh yeh jna in linux
完了,java定义一个c接口就完了
------------------------------
难过啊,被隐藏了,还没被喷够呢!
简单方法难道不是好方法?
webservice是很优雅,不闲麻烦?如果是同一台机器也要走http协议?
java和c的互相调用只是一个接口 ,未必要传指针吧,性能部分当然用c解决,java只是简单的调用一下怎么了?
庆幸有人告诉了ACE,算是没白丢30分
Adaptive Communication Environment(自适配通信环境),简称ACE。为一个以C++的Template技术所做成的开放源代码的可跨平台的网络应用程序的程序库套件。它提供了socket/threading/memory management等多种系统调用的面对对象的wrapper,使C++通信软件开发更加简单
libevent轻量级一些
分享到:
相关推荐
获取窗口句柄后,我们可以通过`User32`类提供的其他函数来操作窗口,比如`MoveWindow`来移动窗口,`ShowWindow`来显示或隐藏窗口,`SetWindowPos`来改变窗口的位置和大小等。 在实际开发中,可能需要处理多个窗口...
当该值为False时,鼠标会被隐藏;为True时,鼠标会重新显示。 在提供的文件列表中,`frmTest.frm`可能是一个测试窗体,用于展示和测试鼠标控制的功能。`CursorTest.vbp`则是VB6项目文件,包含了项目的整体结构和...
关于CClicker是使用JNA和Apache的Math库制作的简单自动单击器。特征可隐藏的窗口可以注入到其他JVM进程中基于的随机化记录自己的点击统计数据并进行模拟可通过GUI访问所有设置使用txt文件的可翻译GUI文本图片
选Bridj的原因是比jni省事,比jna效率要快,而且跨平台,理论上把ctp的dll换成so就能兼容linux了。 JCTP 0.0.2 2013-1-31 增加:JCTPLibraryUtil类,用于初始化CTP环境或卸载CTP环境 增加:JCTPMdApi类,将Bridj...
佳能是可插入任何PC USB端口并提供即时CAN连接的加密狗。...要求Windows XP或以上CANUSB DLL驱动程序版本2.0.2 jna.jar和jna-platform.jar使用图书馆执照CANUSBJNA是根据。链接项目为Tiny-CAN加密狗提供了类似的库。
提供隐藏C类本机接口的类层次结构。 要求 Windows XP或以上 适用于Windows(32/64位)版本3.02或更高版本的Tiny-CAN jna.jar和jna-platform.jar 使用图书馆 执照 TinyCANJNA是根据。 链接 CANUSBJNA项目为CANUSB...
这个项目提供了键盘的显示、隐藏和关闭功能,通过F2、F3和F4键进行控制,同时支持鼠标拖动,提高了用户体验。 在项目中,我们可以看到以下几个关键组件: 1. **swt-win32.dll, swt-extension-win32.dll, swt-gdip-...
JNative的核心思想是通过Java接口来调用DLL中的函数,它提供了一种高级的抽象层,隐藏了JNI的底层细节。这样,开发者可以避免直接编写C语言的头文件和实现文件,减少了工作量和出错的可能性。 使用JNative的过程...
3. **检查作用域**:确保方法不是私有的(private)且没有被隐藏。私有方法只能在定义它的类内部访问,而隐藏的方法则是在子类中定义了同名但参数列表不同的方法。 4. **导入与包管理**:如果方法来自外部库,确保...
Scala是一种强大的静态类型编程语言,它融合了面向对象和函数式编程的特点,被广泛应用于大数据处理、Web开发以及分布式系统。IntelliJ IDEA是广受欢迎的Java集成开发环境(IDE),对于Scala开发者来说,Idea-Scala...
- 具备优秀的包损失鲁棒性及包丢失隐藏能力。 - 支持浮点运算和定点运算。 #### 二、Opus API 组件与功能介绍 ##### 1. OpusEncoder **OpusEncoder** 用于音频编码。主要涉及的操作包括创建编码器实例、初始化...
在这个例子中,`jinvoke`通过`User32`接口调用了Windows API的`FindWindow`和`ShowWindow`函数,隐藏了名为"Notepad"的窗口。 总的来说,`jinvoke`提供了一种高效且灵活的方法来让Java程序与Windows API进行交互,...
如果Java环境支持JNA(Java Native Access),Deeplearning4j可以自动检测并利用GPU资源。 总的来说,Java中的神经网络实现虽然不如Python那么直观,但借助Deeplearning4j这样的库,开发者依然可以高效地构建和训练...
7. **JNA (Java Native Access)**: 类似于JNI,JNA提供了一个更简单的接口来调用本地库,而无需编写C头文件和本地方法。这使得访问硬件驱动变得更加容易。 8. **JNI最佳实践**: 使用JNI时,需要注意性能优化,避免...
在大型分布式系统中,使用反向代理(如Nginx、Apache HTTP Server)可以隐藏内部服务的细节,同时实现负载均衡。Java应用可以通过控制代理服务器的配置,间接实现端口映射。 7. **Docker容器端口映射**: 当Java...
该存储库(用于)托管/孵化以下(相关)项目的源代码: 解析 C、C++ 和 Objective-C 头文件并生成 Java 绑定以用于 BridJ、JNA 或 Rococoa | |是一个运行时库,让 Java 开发人员可以使用 C/C++ 和动态绑定(无需编译...
这通常通过JNI(Java Native Interface)或者特定的库如JNA(Java Native Access)实现,调用操作系统级别的API来完成。 4. **论文部分**:论文可能详细阐述了项目的背景、设计目标、技术选型、系统架构、主要功能...
JNA 库调用基于 COM 的 WINdows 自动化库。 使用 ui-automation 的测试和自动化程序可以用 Java(或其他基于 JVM 的语言,如 Scala)编写,并在 JVM 可用的任何测试框架中使用。 它提供了一致的、面向对象的 API,向...
您不仅获得了简单的绑定,还获得了一个更高层次的框架,该框架隐藏了使用LibVLC的许多复杂性。 vlcj最初是开发的,因此在Linux上进行了广泛的测试-它在Windows和MacOSX上也可以正常工作。 至少需要JDK 1.6,并且...
您不仅可以获得简单的绑定,还可以获得一个更高级别的框架,该框架隐藏了使用 LibVLC 的许多复杂性。 vlcj 主要是在 Linux 上开发的,因此在 Linux 上进行了广泛的测试——它在 Windows 和 OSX 上也能正常工作,尽管...