我现在要在Java中调用一些已经写好的C的函数,应该学些什么啊,具体怎么做?
解决方案 »
- 求前辈解答
- hibernateTemplate 问题
- 数据库 连接自动 一次
- 如何使用<jsp:include>引入struts?
- The value for the useBean class attribute xnc.db.query.DBQuery is invalid.
- ANT是需要学么?
- struts + ajax的后台问题
- 规则引擎的问题
- jsp+bean在JBX中运行没问题,做成war运行,却总提示错误,什么原因呢?
- 如何在安卓(java)端正确读取networkStream 来自C#
- spring ibatis atomikos
- java中的通用添加、删除、修改函数,提交总是失败
给你些网址看看
http://www.javaeye.com/topic/304594http://www.javaeye.com/topic/295776
其次根据头文件,实现C的方法体,再根据不同平台生成对应的动态库,如果是window平台生成dll,如果是linux平台生成so
最后,在java中实现本地调用.
C实现,我的问题是C的已经好了,而不是根据java中的编写,没有项目经验的禁答......
首先一般java调用C程序都是已经写好的C程序,大多数情况下谁也不会无聊去写个C程序,然后用java来调用的,所以你不要特地指明你是现成的C程序来断定不需要我说的这样的流程。
其次我从没说“根据Java中的函数,生成动态库”,没听说过java能生成动态库的,因为你可能没去理解JNI的原理,所以导致了你这样去误解。
最后,不管是已经写好的,或是新写的C程序,如果你想在java里调用的话,都得进行这个流程,其实就是java实现与本地通信的一个接口。
第一步,java编写调用函数,即实现和你C函数一样的功能,不过参数和返回值都是java类型的
第二步,根据java提供的工具javah,把你写的java方法变成C的头文件,为什么要这样做呢,其实这就是一个接口规范了,生成的.h文件,就是你要实现的C的方法体,同时只有遵循这个方法体,java才能调用。
第三步,是最关键的部分,就是实现方法体(包括类型转化,具体方法调用),步骤是java类型与C类型的转变,你传给C的java类型必须转化为C的类型,然后调用你所说的写好的C函数,调用完了,再把你的C的返回值转化为java的类型返回。
到此就实现了调用。
如果你再不明白的话,我可以把程序事例,流程都贴给你。