欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > jna调用c++回调

jna调用c++回调

2024/10/24 11:42:09 来源:https://blog.csdn.net/zsj777/article/details/143175086  浏览:    关键词:jna调用c++回调

1、  WIN10 下pch.h

#ifndef PCH_H
#define PCH_H// 添加要在此处预编译的标头
#include "framework.h"#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)
#else 
#define EXPORT __declspec(dllexport)
#endiftypedef struct Example3Struct {int val;char* name;
} Example3Struct;typedef struct Example4Struct {int val;char* name;char* add;
} Example4Struct;//定义回调开始
typedef void(*Example22Callback)(int);EXPORT void example22_triggerCallback(const Example22Callback pfn);
// 定义回调结束EXPORT void example3_sendStruct(const Example3Struct* sval);EXPORT Example4Struct example4_getStruct(const Example3Struct* sval3);#endif //PCH_H

2、WIN10下 pch.cpp

// pch.cpp: 与预编译标头对应的源文件#include "pch.h"
#include "iostream"void example3_sendStruct(const Example3Struct* sval){// note: printfs called from C won't be flushed// to stdout until the Java process completesstd::cout << sval->val << std::endl;std::cout << sval->name << std::endl;}Example4Struct example4_getStruct(const Example3Struct* sval3){Example4Struct sval4;sval4.val = 23+sval3->val;sval4.name = sval3->name;sval4.add = sval3->name;return sval4;}typedef void(*Example22Callback)(int);void example22_triggerCallback(const Example22Callback pfn){(*pfn)(300);}

3、java代码  VideoAiLibrary.java

package com.example.demo.jna;import com.sun.jna.Callback;
import com.sun.jna.Library;
import com.sun.jna.Structure;public interface VideoAiLibrary extends Library {@Structure.FieldOrder({"val", "name"})public static class Example3Struct extends Structure {public static class ByReference extends Example3Struct implements Structure.ByReference {}public int val;public String name;}@Structure.FieldOrder({"val", "name", "add"})public static class Example4Struct extends Structure {public static class ByValue extends Example4Struct implements Structure.ByValue {}public int val;public String name;public String add;}//回调public interface Example22CallbackInterface extends Callback {void invoke(int val);}// define an implementation of the callback interfacepublic static class Example22CallbackImplementation implements Example22CallbackInterface {@Overridepublic void invoke(int val) {// 处理回调函数的结果System.out.println("example22: " + val);}}//回调方法public void example22_triggerCallback(Example22CallbackInterface callback);public Example4Struct.ByValue example4_getStruct(Example3Struct.ByReference sval);// unless otherwise specified, ByReference is assumed - but it can't hurt to be explicitpublic void example3_sendStruct(Example3Struct.ByReference sval);
}

4、java代码 JnaTest.java

package com.example.demo.jna;import com.sun.jna.Native;public class JnaTest {public static  void main(String ... args){final VideoAiLibrary clib = (VideoAiLibrary) Native.load("mycpp11", VideoAiLibrary.class);final VideoAiLibrary.Example3Struct.ByReference e3ref = new VideoAiLibrary.Example3Struct.ByReference();e3ref.val = 700;e3ref.name="朱dddp";clib.example3_sendStruct(e3ref);final VideoAiLibrary.Example4Struct.ByValue e4val = clib.example4_getStruct(e3ref);System.out.println("example 4: " + e4val.val);System.out.println("example 4: " + e4val.name);System.out.println("example 4: " + e4val.add);//回调clib.example22_triggerCallback(new VideoAiLibrary.Example22CallbackImplementation());}}

linux 下c++和java测试代码

通过百度网盘分享的文件:JNA_TESTlinuxcallback.zip
链接:https://pan.baidu.com/s/1X4ULU8Zp6xjW9kajDnncpQ?pwd=484q 
提取码:484q

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com