JNA回调函数问题

问题描述

Java调用C++写的dll,dll内部也回调Java的函数。(使用JNA)功能已实现,但回调有个问题:dll回调Java函数若干次后就回调不成功了!(dll内部执行是没问题的)回调函数很简单:typedefvoid(__stdcall*InterfaceCallback)(intdata);

Java这端的定义:publicinterfaceCTP2JAVADLLextendsStdCallLibrary{publicinterfaceICallbackextendsStdCallCallback{voidFnCallBack(intdata);}publicvoidRegisterCallback(ICallbackcallback);...}

Java这端继承的是StdCallLibrary和StdCallCallback。怀疑JNA回调机制有问题,还是我使用有疏忽的地方?请高人帮帮忙,谢谢了!

解决方案

本帖最后由 bodybo 于 2013-12-18 12:11:25 编辑
解决方案二:

自己解决了,原因是调用RegisterCallback注册回调函数时直接new的接口实例,没有定义一个接口变量来保存回调函数句柄,造成回调函数句柄被回收了(猜想)

时间: 2025-01-15 04:15:52

JNA回调函数问题的相关文章

解决ajax回调函数返回的字符串乱码问题

  ajax回调函数,返回的字符串乱码问题很是让人痛恨,下面有个不错的解决方法,大家可以参考下 ServletActionContext.getResponse().setContentType("text/json;charset=UTF-8");//解决乱码问题,没有这句,回调函数的内容可能乱码 ServletActionContext.getResponse().getWriter().write("字符串内容");//在写入之前执行上面一句,可以解决乱码  

回调函数

1 什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用:回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口:异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口).回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通

js中回调函数问题,程序进不了回调函数

问题描述 js中回调函数问题,程序进不了回调函数 我这段代码的回调函数哪出错,请各位大神指教 function req(){ createRequest(); var zipcode=document.getElementById(""zipcode"").value; var url=""b.jsp?zipcode="" + escape(zipcode); request.open(""POST&quo

C/C++回调函数

回调函数就像您随身带的BP机:告诉别人号码,在它有事情时Call您        回调用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍.        其实回调和API非常接近,他们的共性都是跨层调用的函数.但区别是API是低层提供给高层的调用,一般这个函数对高层都是已知的:而回调正好相反,他是高层提供给

python回调函数用法实例分析

  这篇文章主要介绍了python回调函数用法,较为详细的分析了常用的调用方式,并实例介绍了Python回调函数的使用技巧,需要的朋友可以参考下 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,调用方要等待对方执行完毕 才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它 的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,

上传-jQuery ajax form提交在IE8下不执行回调函数

问题描述 jQuery ajax form提交在IE8下不执行回调函数 // 上传文件function myUploadExcel(obj) {var options = { url : ""${ctx}/ins/pro/upLoadTempFile.do?filename=""+obj.value dataType : ""text"" beforeSubmit : function(formDatajqFormoption

理解javascript 回调函数

在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A.我们就说函数A叫做回调函数.如果没有名称(函数表达式),就叫做匿名回调函数.因此callback 不一定用于异步,一般同步(阻塞)的场景下也经常用到回调,比如要求执行某些操作后执行回调函数. 例子 一个同步(阻塞)中使用回调的例子,目的是在func1代码执行完成后执行func2. var func1=function(callback){     //do something

Jquery 实现层的拖动,支持回调函数

最近在写一个CMS内容管理系统,前台基本是用ajax异步请求服务器,通过ashx处理,返回json格式处理.由于需要更加人性化的界面,所以采用到了拖动层的操作. 以下是拖动层的主要核心方法,本来想写成插件的,考虑的没那么多时间,就以方法的方式了. /*  * Jquery 鼠标左键拖动面板  * coder:新生帝  * obj:jQuery选择器名称  * callback:回调函数(拖动停止要执行的函数),可通过$(this)获取 obj 对象  */  function movePanel

Promise模式将JS回调函数和异步函数彻底分离

文章简介:情况再复杂点,如果一个操作要等到多个异步 ajax 请求的完成才能进行,就会出现回调函数嵌套的情况,如果需要嵌套好几层,那你就只能自求多福了. 网页的交互越来越复杂,JavaScript 的异步操作也随之越来越多.如常见的 ajax 请求,需要在请求完成时响应操作,请求通常是异步的,请求的过程中用户还能进行其他的操作,不会对页面进行阻塞,这种异步的交互效果对用户来说是挺有友好的.但是对于开发者来说,要大量处理这种操作,就很不友好了.异步请求完成的操作必须预先定义在回调函数中,等到请求完