我现在要在Java中调用一些已经写好的C的函数,应该学些什么啊,具体怎么做?

解决方案 »

  1.   

    百度一下,找点JNI的例子看看应该就会做了
    给你些网址看看
    http://www.javaeye.com/topic/304594http://www.javaeye.com/topic/295776
      

  2.   

    首先要java编写好需调用的方法,再用java自带的javah工具生成c所用的头文件,
    其次根据头文件,实现C的方法体,再根据不同平台生成对应的动态库,如果是window平台生成dll,如果是linux平台生成so
    最后,在java中实现本地调用.
      

  3.   

    我提的问题你可能没看懂,现在是C的已经实现好了,你说的是根据Java中的函数,生成动态库,在
    C实现,我的问题是C的已经好了,而不是根据java中的编写,没有项目经验的禁答......
      

  4.   

    楼主不知道虚心请教
       首先一般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的类型返回。
       到此就实现了调用。
       
        如果你再不明白的话,我可以把程序事例,流程都贴给你。
      

  5.   

    写的好累,如果你不明白JNI原理的话还可能是一头雾水,最好去理解一下原理,要不然你后续还可能遇到好多问题,比如部署方面,如果传参数是中文还有中文方面的问题。