前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 调用C++ dll问题记录

java 调用C++ dll问题记录

作者头像
MaybeHC
发布2024-04-23 19:41:48
690
发布2024-04-23 19:41:48
举报
文章被收录于专栏:技术之路技术之路

问题一 函数无法被调用

找不到函数,首先检查函数名称是否相同,在函数名称相同的情况下,我c++的函数中有 _stdcall签名,去除_stdcall签名后可进行正常调用。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题二 c++代码 SetTimer定时器无法触发回调函数

在接口中我设置了回调函数,以让c++程序定时给java程序传送数据,但是发现通过java的调用定时器无法执行,java程序中的回调函数更无法接收到消息(被调用)。 最后多处查询得知:

SetTimer 依赖线程的消息队列, 需要消息引擎, 回调函数是在系统的默认消息处理函数中去调用的

MSDN When you specify a TimerProc callback function, the default window procedure calls the callback function when it processes WM_TIMER

也就是在JAVA中调用时,SetTimer不能支持也就不会被触发。最后使用定时器队列代替,触发正常

代码语言:javascript
复制
  m_hTimerQueue = CreateTimerQueue();

问题三 调用带回调函数的c++ dll时如何编码?

这里做个记录

接口类:

代码语言:javascript
复制
public interface AiteTrackerDll extends Library {

    boolean _InitTracker(String cameraName, int width, int height);
    void _CloseTracker();
    void _OnGazeImage(Callback onGazeImage, int debugMode);
    void _OnGazeData(Callback onGazeData);
    void _SetCalibration(float[] data);
    void _SetCompensate(float distanceCompensate);
    void _SetCalibrateStatue(int mode);
    
    public static class ONGAZEIMAGEimpl implements ONGAZEIMAGE  {
        public void MessageHandle(int width, int height, int step, String data) {
            System.out.println("回调成功");
        }
    }
    public interface ONGAZEDATA extends StdCallLibrary.StdCallCallback {
        public abstract void MessageHandle(float leftX, float leftY, float rightX, float rightY, float distance, float leftPupilRadius, float rightPupilRadius);
    }
}

调用类:

代码语言:javascript
复制
        final  AiteTrackerDll instance= Native.loadLibrary("dll\\AiteTracker", AiteTrackerDll.class);
        AiteTrackerDll.ONGAZEDATA callback = new AiteTrackerDll.ONGAZEDATAimpl();
        AiteTrackerDll.ONGAZEIMAGE callback1 = new AiteTrackerDll.ONGAZEIMAGEimpl();
        instance._OnGazeData(callback);
        instance._OnGazeImage(callback1,0);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题一 函数无法被调用
  • 问题二 c++代码 SetTimer定时器无法触发回调函数
  • 问题三 调用带回调函数的c++ dll时如何编码?
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档