高手救命!
公司项目有个需求,就是web网站要集成考勤机。
本人需要用java语言调用考勤机相关软件包,进行数据的维护;但是硬件厂商只提供了几个dll文件和对应的ocx文件,相关的帮助文档中只有方法名和参数。
关于java如何调用其中的dll方法,本人研究了好几天了,通过在网上查找资料,尝试了jawin,jnative,jcob等项目,均不理想,关键是c语法参数与java语法参数的匹配转换是个难点,网上的一些案例介绍都是一些非常简单的例子,基本没有帮助意义。本人觉得还是jnative对于参数的匹配模式容易理解些,学习其源码中user32类和另外一个类(名字忘了),但是还是没有头绪:例如它有时用Pointer匹配LPSTR * 类型数据,有时又用Pointer里的Pointer匹配;看得本人云里雾里;还有,创建指针时,其内存块有的是4,有的是32等等,是不是用jnative转换类型还要知道底层c语法的参数结构才行?我不知道c语法的dll库文件源码,Jnative有没有一个透明的针对c语法参数的匹配规律?
希望有高人指点,谢谢。
如果能0距离指点,更加感激不尽了,为了完成任务,本人已经吃不香睡不相了。
qq号码:371319819
公司项目有个需求,就是web网站要集成考勤机。
本人需要用java语言调用考勤机相关软件包,进行数据的维护;但是硬件厂商只提供了几个dll文件和对应的ocx文件,相关的帮助文档中只有方法名和参数。
关于java如何调用其中的dll方法,本人研究了好几天了,通过在网上查找资料,尝试了jawin,jnative,jcob等项目,均不理想,关键是c语法参数与java语法参数的匹配转换是个难点,网上的一些案例介绍都是一些非常简单的例子,基本没有帮助意义。本人觉得还是jnative对于参数的匹配模式容易理解些,学习其源码中user32类和另外一个类(名字忘了),但是还是没有头绪:例如它有时用Pointer匹配LPSTR * 类型数据,有时又用Pointer里的Pointer匹配;看得本人云里雾里;还有,创建指针时,其内存块有的是4,有的是32等等,是不是用jnative转换类型还要知道底层c语法的参数结构才行?我不知道c语法的dll库文件源码,Jnative有没有一个透明的针对c语法参数的匹配规律?
希望有高人指点,谢谢。
如果能0距离指点,更加感激不尽了,为了完成任务,本人已经吃不香睡不相了。
qq号码:371319819
我们公司的一个协同办公项目需要集成考勤机,目前市面上的考勤机大部分都是c写的,而且他们给的demo是vb版的。
提供的文件只有dll和ocx,不要和我说考虑用vb调用dll和ocx。如果可以的话,希望有人指点下怎么用JNative处理dll中的指针型参数,例如c中返回的Date * 型变量,在java中怎么解析它的返回值?我用各个指针变量的getPoiter()方法得到的好像是内存地址,怎么得到该地址里的数据呢?java应该不能直接读取指定内存地址里的数据的。
用byte[]原理也是一样的,通过memcpy把内存信息拷贝到byte数组里,然后根据C/C++或java的类型长度对byte[]进行对应的移位运算等,然后再memcpy拷贝到相应的结构体中
其实对于指针指向的是什么类型是无所谓的(就算java知道了也没用)
但是必须知道指针所指向的内存地址的数据存储方式如此保存到byte[]就可以自己解析了说白了,最通用的方法就是用byte[]去代替c的指针
一是用JNA
二是把ocx做成控件
在web上调用