JNative 调用DLL 中控考勤机二次开发

yunjun_2008 2013-10-23 04:14:36

DLL为EMSDK

jna0 = new JNative("zkemsdk.dll","_Z_SetDeviceCommPwd@8");
jna0.setRetVal(Type.INT );
jna0.setParameter(0,Type.LONG ,"120");
jna0.setParameter(1,Type.LONG ,"51696");
jna0.invoke();
String val0 = jna0.getRetVal();
System.out.println("val0:"+val0);
if(jna0!=null)
{
jna0.dispose();
}


一调用就出现下面的错误信息:

#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x10010f6b, pid=824, tid=964
#
# Java VM: Java HotSpot(TM) Client VM (11.0-b15 mixed mode, sharing windows-x86)
# Problematic frame:
# C [zkemsdk.dll+0x10f6b]
#
# An error report file with more information is saved as:
# D:\wrokspace\Test\hs_err_pid824.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

...全文
1029 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mykingbull 2013-10-25
  • 打赏
  • 举报
回复
dll的版本和你的操作系统不兼容,需要找购买考勤机的索要兼容的。
teemai 2013-10-24
  • 打赏
  • 举报
回复
先看看你那个错,JNative较老,使用比较麻烦,我推荐用JNA试试吧。 看个实例: DLL函数映射:

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public class JoymindCommDLL {

    public interface JoymindCommDLLLib extends Library {
            String dllPath = "C:/JoymindComm.dll";
        JoymindCommDLLLib INSTANCE = (JoymindCommDLLLib) Native.loadLibrary((Platform.isWindows() ? dllPath : "c"), JoymindCommDLLLib.class);

        /* System Configuration */
        /**
* 设置显示屏参数
* @param ip IP地址
* @param width 显示屏长度,单位:像素
* @param height 显示屏高度,单位:像素
* @return 0:操作失败,1:操作成功
*/
        public int SetScreenPara(String ip, int width, int height);

        /**
* 开关屏设置
* @param ip IP地址
* @param power 开关屏状态,0:关屏,1:开屏
* @return 0:操作失败,1:操作成功
*/
        public int SetPower(String ip, int power);

        /**
* 清屏设置
* @param ip IP地址
* @return 0:操作失败,1:操作成功
*/
        public int ClearScreen(String ip);

        /**
* 校正时间
* @param ip IP地址
* @return 0:操作失败,1:操作成功
*/
        public int AdjustTime(String ip);

        /**
* 设置控制器网络参数
* @param ip IP地址
* @param ipAddress 新IP地址
* @param getway 网关
* @param subnetmask 子网掩码
* @return 0:操作失败,1:操作成功
*/
        public int SetNetwork(String ip, String ipAddress, String getway, String subnetmask);

        /**
* 编辑完节目内容后,发送显示内容
* @param ip IP地址
* @return 0:操作失败,1:操作成功
*/
        public int SendDisplayData(String ip);

        /**
* 清除动态库 临时文件
*/
        public void ResetDLL();

        /**
* 上传媒体文件
* @param ip IP地址
* @param fileName 文件路径
* @return 0:操作失败,1:操作成功
*/
        public int AddMediaFile(String ip, String fileName);

        /**
* 清除所有媒体文件
* @param ip IP地址
* @return 0:操作失败,1:操作成功
*/
        public int ClearMediaFile(String ip);

        /* System Configuration */

        /* Display Configuration */
        /**
* 添加节目
* @param jno 节目号( >=1 )
* @param playTime 播放时间 (单位:秒)
* 若 = 0, 则等待播放完成
* 若 > 0, 则播放指定时间
* @param bgFile 背景图片名称(若为0,则无背景图片)【暂不支持】
* @return 0:操作失败,1:操作成功
*/
        public int AddProgram(int jno, int playTime, String bgFile);

        /**
* 添加文本区域
* @param jno 节目号 (>=1)
* @param qno 区域号 (>=1)
* @param left 区域左上角顶点x坐标,单位:象素
* @param top 区域左上角顶点y坐标,单位:象素
* @param width 区域宽度,单位:象素
* @param height 区域高度
* @param fontColor 字体颜色
* @param fontName 字体名【暂支持宋体】
* @param fontSize 字体号
* @param fontBold 字体粗细(0:不加粗;1:加粗)
* @param fontItalic 字体斜体(0:不斜体;1:斜体) 【暂不支持】
* @param fontUnder 字体下划线(0:无;1:有) 【暂不支持】
* @param line 自动换行(0:不自动;1:自动)
* @param hAlign 水平对齐(1:左对齐;2:居中;3:右对齐)
* @param vAlign 垂直对齐(1:上对齐;2:居中;3:下对齐)
* @param text 显示字符串
* @param type 显示特技
* @param speed 显示速度
* @param delay 停留时间
* @return 0:操作失败,1:操作成功
*/
        public int AddTextArea(int jno, int qno, int left, int top, int width, int height, int fontColor, String fontName, int fontSize, int fontBold, int fontItalic, int fontUnder, int line,
                int hAlign, int vAlign, String text, int type, int speed, int delay);

        /**
* 添加数字时钟区域
* @param jno 节目号 (>=1)
* @param qno 区域号 (>=1)
* @param left 区域左上角顶点x坐标,单位:象素
* @param top 区域左上角顶点y坐标,单位:象素
* @param width 区域宽度,单位:象素
* @param height 区域高度
* @param fontColor 字体颜色
* @param fontName 字体名
* @param fontSize 字体号
* @param fontBold 字体粗细(0:不加粗;1:加粗)
* @param fontItalic 字体斜体(0:不斜体;1:斜体) 【暂不支持】
* @param fontUnder 字体下划线(0:无;1:有) 【暂不支持】
* @param mode 时间格式
1:全部显示
2:年月日
3:月日
4:时分秒
5:时分
6:星期
7:年
8:月
9:日
10:时
11:分
12:秒

* @param format 显示模式
1:2008年08月08日 08时08分08秒
2:2008-08-08 08:08:08
3:08/08/2008 08:08:08

* @return 0:操作失败,1:操作成功
*/
        public int AddDClockArea(int jno, int qno, int left, int top, int widht, int height, int fontColor, String fontName, int fontSize, int fontBold, int fontItalic, int fontUnder, int mode,
                int format);

        /**
* 添加文件区域,目前支持的文件格式有:
1)图片格式:bmp、jpg、png
2)【暂不支持】文本格式:doc、rtf、doc
3)动画格式:gif

* @param jno 节目号 (>=1)
* @param qno 区域号 (>=1)
* @param left 区域左上角顶点x坐标,单位:象素
* @param top 区域左上角顶点y坐标,单位:象素
* @param width 区域宽度,单位:象素
* @param height 区域高度
* @return 0:操作失败,1:操作成功
*/
        public int AddFileArea(int jno, int qno, int left, int top, int width, int height);

        /**
* 添加文件到图文区域中
当文件格式为gif时,特技类型、运行速度、停留时间可使用任意值,下位机会按gif原始效果播放。
* @param jno 节目号 (>=1)
* @param qno 区域号 (>=1)
* @param mno 文件号 (>=1)
* @param fileName 文件路径
* @param width 文件显示宽度(目前为区域的宽度) 【可忽略】
* @param height 文件显示高度(目前为区域的高度) 【可忽略】
* @param type 特技类型(特效:见附录)
* @param speed 运行速度
* @param delay 停留时间
* @return 0:操作失败,1:操作成功
*/
        public int AddFile2Area(int jno, int qno, int mno, String fileName, int width, int height, int type, int speed, int delay);

        /**
* 添加视频区域(每个节目最多1个)
1.目前支持的文件格式有: H.264(25M码流)、MPEG1/2(40M码流)、MPEG4/Divx/Xvid(35M码流)、VC-1(30M码流)、RMVB8/9/10(30MB码流)、H.263(40M码流)
2.视频区域必须在所有区域最后添加。
3.传输速度:50MB文件需要30秒

* @param jno 节目号 (>=1)
* @param qno 区域号 (>=1)
* @param left 区域左上角顶点x坐标,单位:象素
* @param top 区域左上角顶点y坐标,单位:象素
* @param width 区域宽度,单位:象素
* @param height 区域高度
* @param fileName 文件名称
* @return 0:操作失败,1:操作成功
*/
        public int AddVideoArea(int jno, int qno, int left, int top, int width, int height, String fileName);
        /* Display Configuration */
        
        /**
* 附录1:特技列表
0:翻页(静止)
1:左移
2:右移
3:上移
4:下移
*/
        
        public int GetRGB( int r, int g, int b);
        
        
        
        
        /**
* the interface need from my side
*/
        /**
* @param ip
* @param configFile
* @return 0:操作失败,1:操作成功
*/
        public int SetTimerPower(String ip, String configFile);
        
        /**
* @param ip
* @return the file path
*/
        public String GetScreenShot(String ip);
        
        /**
* @param macAddress
* @return the device information
*/
        public String AddDevice(String macAddress);
        
        /**
* @param ip
* @return 0:操作失败,1:操作成功
*/
        public int ResetDevice(String ip);
        
        /**
* 推送节目压缩包
* @param ip
* @param fileName
* @return 0:操作失败,1:操作成功
*/
        public int PushProgram(String ip, String fileName);
        
        /**
* [CTRL_INFO]         

                        PNO                 =(屏号) 根据控制器硬件拨码值
                        VERSION         =(系统软件版本号)
                        WIDTH                =(屏宽)
                        HEIGHT                =(屏高)
                        STORAGE                =(存储模式)
                                                        1:FLASH存储
                                                        2:RAM存储
                                                        3:SD卡存储
                        IP                        =(IP地址)
                        GATEWAY                =(网关)
                        SUBNETMASK        =(子网掩码)
                        MACADDRESS        =(MAC地址)
                                                        格式:xx-xx-xx-xx-xx-xx
                        STATUS                =(设备运行状态)
                                                        0 : 关屏状态
                                                        1 : 开屏状态
                        TIME                =(设备当前时间)
                                                        Eg: 2010/7/23 19:16:15
                        FREEDISK        =(剩余存储空间大小,单位BYTE)
                        PRGTOTAL        =(设备节目总数)
                        PRGINDEX        =(当前播放节目序号)
                        BOOT_TIME        =(设备开机时间)
                                                        Eg: 2010/7/23 19:16:15
                                                        
* @param ip                        IP地址
* @param fileName                生成的文件名称
* @return                                0:操作失败,1:操作成功
*/
        public int GetSysInfo(String ip, String fileName);
        
        /**
* @param jno                        节目号 (>=1)
* @param type                        定时类型:0(无定时);1(循环播放);2(指定播放)
* @param startYear                开始日期(年)
* @param startMonth        开始日期(月)
* @param startDay                开始日期(日)
* @param startHour                开始时间(时)
* @param startMinute        开始时间(分)
* @param startSecond        开始时间(秒)
* @param endYear                结束日期(年)
* @param endMonth                结束日期(月)
* @param endDay                结束日期(日)
* @param endHour                结束时间(时)
* @param endMinute                结束时间(分)
* @param endSecond                结束时间(秒)
* @param monday                星期一显示 (0:不显示;1:显示)
* @param tuesday                星期二显示 (0:不显示;1:显示)
* @param wednesday                星期三显示 (0:不显示;1:显示)
* @param thursday                星期四显示 (0:不显示;1:显示)
* @param friday                星期五显示 (0:不显示;1:显示)
* @param saturday                星期六显示 (0:不显示;1:显示)
* @param sunday                星期日显示 (0:不显示;1:显示)
* @return                                0:操作失败,1:操作成功
*
* 注:
* 1)当定时类型为无定时,其他参数可以设置为0,则正常播放节目;
* 2)当定时类型为循环播放,按照开始日期到结束日期,且星期显示的设置的日期,然后每天根据开始时间到结束时间播放节目;
* 3)当定时类型为指定播放,按照开始日期的开始时间一直到结束日期的结束时间播放节目
*/
        public int SetProgTimer(int jno, int type,
                        int startYear, int startMonth, int startDay, int startHour, int startMinute, int startSecond,
                        int endYear, int endMonth, int endDay, int endHour, int endMinute, int endSecond,
                        int monday, int tuesday, int wednesday, int thursday, int friday, int saturday, int sunday);
    }
}
调用:

JoymindCommDLLLib instance = JoymindCommDLLLib.INSTANCE;
instance.AdjustTime("192.168.1.100");
yunjun_2008 2013-10-24
  • 打赏
  • 举报
回复
您好,日志看了,是JVM crash了,因为native code.还是没发现原因。谢谢您!
  • 打赏
  • 举报
回复
不要错过错误日志, 看看 D:\wrokspace\Test\hs_err_pid824.log 先
yunjun_2008 2013-10-23
  • 打赏
  • 举报
回复
求大侠指点!
yunjun_2008 2013-10-23
  • 打赏
  • 举报
回复
在线等呀,自己up
内容概要:本文系统研究了开关频率大于谐振频率(fs>fr)工况下,移相混合控制LLC谐振变换器在低压增益区域的工作特性,深入分析其在变频与移相结合控制模式下的调制机理、工作模态划分及损耗分布规律。通过Simulink平台构建高保真仿真模型,对变换器在不同负载和输入条件下的电压增益、转换效率、关键器件电压电流应力等性能指标进行了全面仿真验证,重点探讨了其在低增益区间的软开关实现能力与效率优化潜力,旨在提升LLC变换器在宽范围输入输出应用中的动态响应与能源转换效率。; 适合人群:从事电力电子变换器设计、高频电源开发及相关领域的高校研究生、科研院所研究人员及企业研发工程师,要求具备扎实的电路理论基础、电力电子技术知识以及一定的Simulink仿真能力。; 使用场景及目标:①深入理解LLC谐振变换器在fs>fr条件下采用移相混合控制的内在工作机理与模态转换过程;②掌握利用Simulink搭建复杂谐振变换器精确仿真模型的方法与技巧;③分析并优化低压增益区的增益特性与损耗构成,为设计高效率、高功率密度的软开关电源提供理论依据和数据支持; 阅读建议:建议读者结合文中所述仿真模型,亲自复现仿真过程,重点观察不同控制参数(如移相比、开关频率)对电压增益曲线和关键波形的影响,并对比传统变频控制策略,深入探究混合控制在拓宽调压范围、提升轻载效率方面的优势,从而深化对现代高效谐振电源设计的理解。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化问题;②掌握双层优化建模方法与粒子群算法在复杂电力系统问题中的应用技巧;③为实际工程中分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。
内容概要:本文围绕双机并联虚拟同步发电机(VSG)在微电网中的功率分配、黑启动、虚拟阻抗与预同步控制展开,基于Simulink平台构建了完整的微电网系统仿真模型。重点研究了VSG在双机并联运行下的有功/无功功率均分控制策略,通过引入虚拟阻抗技术有效解决了因线路阻感比差异导致的功率分配不均问题。同时,设计了微电网黑启动流程与并网预同步控制模块,实现了待并网系统与主网在电压幅值、频率和相位上的精确同步,显著降低了并网冲击电流。系统整合了VSG控制、下垂控制、虚拟阻抗、锁相环(PLL)及预同步逻辑等关键环节,全面验证了多VSG协同运行的稳定性、自主恢复能力与并网可靠性。; 适合人群:具备电力系统、电力电子及自动控制等相关专业知识,从事微电网、分布式发电、VSG控制与并网技术研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解双机并联VSG系统中功率分配不均的机理及虚拟阻抗的补偿作用;②掌握微电网黑启动全过程及预同步控制的关键技术要点;③学习并实践基于Simulink的微电网多层次、多目标控制策略的建模与仿真方法;④为相关科研课题、毕业设计或实际工程项目提供可复现、可拓展的技术方案与仿真参考。; 阅读建议:建议结合提供的Simulink模型文件进行同步学习,重点关注VSG控制参数整定、虚拟阻抗设计原则、预同步切换逻辑等核心模块的实现细节,并可通过改变负载投切、线路参数或初始频率偏差等条件进行多工况仿真测试,以深入探究系统的动态响应特性与鲁棒性。

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧