项目背景,,现在的项目要和一个业务公司做接口,调用对方的提供的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是第一次用,能调用前面一个方法就再也没办法走下去了,,
问题在简单点说,,对方给个 dll 文件,,有方法long start(Interface *p_inter, char *FUNC_ID) 给你,你有没有能力调用好它,怎么调用,,能调用成功的就是我要找的jni英雄,至少说明他对jni和c 有一定的造诣,我是搞了三个星期了,对c 不是和熟悉,,jni是第一次用,能调用前面一个方法就再也没办法走下去了,,
http://www.javaeye.com
原来就是用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,实现真的调用。
1.脚踏实地的看懂jni原理。
2.自己实现一个jni调用。
3.baidu,google找资料。
4.虚心问问以前的前辈。
5.
哪里不懂就找书看,弄懂为止,3个星期了,你做了什么呢?
jni调用的书不少吧,去书店看看。
另外,楼主把Interface声明贴上来,别让大家在这里猜测它的实际类型