1、开发环境:Java环境:JDK 1.6.0_18
2、C++代码 创建一个动态链接库项目JNALib,创建一个c++源文件clib.cpp,生成结果为libJNALib.dll
- #include <stdlib.h>
- #include <iostream>
- using namespace std;
- extern "C"
- {
- typedef void (*OpenFunc)(const char*,int);
- OpenFunc openfunc = NULL;
- void init(OpenFunc func) {
- cout << "init called" <<endl;
- openfunc = func;
- }
- void test() {
- if (openfunc == NULL) {
- cout << "openfunc is NULL" << endl;
- }
- (*openfunc)("test", 0);
- }
- }
复制代码注意:其中OpenFunc声明了一个回调类型,也就是一个函数指针,可以通过init将java中的OpenFunc方法传递进来,设置这个函数指针,如此一来,可以实现C++到Java的回调。
3、Java代码 创建一个Java项目JNADemo,创建一个包clibtest,创建以下java代码:
- package clibtest;
- import com.sun.jna.Callback;
- import com.sun.jna.Library;
- public interface CLib extends Library{
- public interface OpenFunc extends Callback {
- void invoke(String filename, int i);
- }
- void init(OpenFunc openfunc);
- void test();
- }
- package clibtest;
- import com.sun.jna.Native;
- public class hello {
- public static void main(String[] args) {
- // Loading dynamically the library
- CLib lib = (CLib) Native.loadLibrary("libJNALib", CLib.class);
- lib.init(new CLib.OpenFunc() {
- public void invoke(String filename, int i) {
- System.out.println("callback called.");
- System.out.println(filename);
- }
- });
- lib.test();
- }
- }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。