项目背景,,现在的项目要和一个业务公司做接口,调用对方的提供的hg.dll文件,,我用java jni 写了个外套的dll   c语言写的,调用它的long newinterfacewithinit(char *Addr, int Port, char *Servlet) 方法,是完全没问题的,,但是接着就是这是调用long start(Interface *p_inter, char *FUNC_ID)方法,,可是Interface *p_inter 在c里头怎么声明,,对方的意思是用long 型,可是不行,他是说用(pb,vb调用的时候用long)型,在java   里头应该用什么类型,,在对应的 c里头又应该怎么写??
问题在简单点说,,对方给个 dll 文件,,有方法long start(Interface *p_inter, char *FUNC_ID)  给你,你有没有能力调用好它,怎么调用,,能调用成功的就是我要找的jni英雄,至少说明他对jni和c 有一定的造诣,我是搞了三个星期了,对c 不是和熟悉,,jni是第一次用,能调用前面一个方法就再也没办法走下去了,,

解决方案 »

  1.   

    看楼主好痛苦,不知道去javaeye问过没。那里高手多。
    http://www.javaeye.com
      

  2.   

    问过了,还是没等到高手的出现,真实怀疑jni 就这么难吗
      

  3.   

    没学过java,所以看了看JNI是什么。
    原来就是用java写了一个类声明。把里面一些需要用DLL提供的函数写成Native。
    然后生成DLL使用的头文件。然后生成DLL。我觉得你写一个long start(long p_inter, long FUNC_ID);不要把指针看的太神秘。
    它就是一个地址而已。然后JNI生成头文件。
    然后用这个头文件,实现一个DLL。这个DLL所要做的事情很简单。
    实现一个函数转发。long start(long p_inter, long FUNC_ID){
         return start((Interface*)p_inter,(char*)FUNC_ID);
    }
    因此你这个Dll需要包含你们的那个业务公司提供的头文件。和lib
    文件。连接成一个DLL。业务公司提供的头文件中,应该提供了Interface
    接口的类型。
    现在说说工作的过程:
    你在java中调用Native的start方法。
    这个方法会启动转发的Dll文件。
    就是你写的那个Dll,然后这个Dll会装载
    业务公司的提供的DLL,实现真的调用。
      

  4.   

    我不认为这个有什么难度,把一个Java Class 和 C 里的 Interface对应起来就行,如何对应就要看具体实现了。一般来说 Java 部分负责的是一个结构体。然后通过JNI把这个结构体转化为C里的Interface,你自己看看如何转化吧
      

  5.   

    http://community.csdn.net/Expert/topic/5647/5647529.xml?temp=.590893楼猪人品有问题~
      

  6.   

    要是我就在csdn问不到人回答我就会这么做。
    1.脚踏实地的看懂jni原理。
    2.自己实现一个jni调用。
    3.baidu,google找资料。
    4.虚心问问以前的前辈。
    5.  
    哪里不懂就找书看,弄懂为止,3个星期了,你做了什么呢?
    jni调用的书不少吧,去书店看看。
      

  7.   

    liu_yuntao520() 正解
    另外,楼主把Interface声明贴上来,别让大家在这里猜测它的实际类型