会聚csdn中的所有java jni 高手可能都解决不了这jni问题,我一天发一问连续三个星期,坚持再坚持还没有碰到jni 高手,高手太少了,这一帖

songsongsong84 2007-07-20 05:15:57
项目背景,,现在的项目要和一个业务公司做接口,调用对方的提供的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是第一次用,能调用前面一个方法就再也没办法走下去了,,
...全文
598 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ffb 2007-08-22
  • 打赏
  • 举报
回复
liu_yuntao520() 正解
另外,楼主把Interface声明贴上来,别让大家在这里猜测它的实际类型
alan001 2007-07-23
  • 打赏
  • 举报
回复
UP
grass_12 2007-07-23
  • 打赏
  • 举报
回复
同意楼上的意见,你太空虚了,没有学习的独立性,三个学期够你自己解决问题的了,
KingNE 2007-07-23
  • 打赏
  • 举报
回复
up
JJFuture 2007-07-23
  • 打赏
  • 举报
回复
顶楼上,问问题是好的,也提倡大家讨论,但只会一味求人是不行的。
chszs 2007-07-22
  • 打赏
  • 举报
回复
不是高手太少,我一般都不理会10分帖,特别是有难度的帖,楼主你就该大方点。
太小家子气了!!!
rainv 2007-07-22
  • 打赏
  • 举报
回复
要是我就在csdn问不到人回答我就会这么做。
1.脚踏实地的看懂jni原理。
2.自己实现一个jni调用。
3.baidu,google找资料。
4.虚心问问以前的前辈。
5.
哪里不懂就找书看,弄懂为止,3个星期了,你做了什么呢?
jni调用的书不少吧,去书店看看。
CrazyGou 2007-07-22
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5647/5647529.xml?temp=.590893

楼猪人品有问题~
liu_yuntao520 2007-07-22
  • 打赏
  • 举报
回复
看了以前的帖。
感觉LZ人品的确有问题
happiness612 2007-07-22
  • 打赏
  • 举报
回复
同意楼上说的!
你不觉得你的分太少了吗?
都那么多人给你回答,你还在那话多!
也许是别人给你讲了怎么做而你却不会做!那就没有办法了啊!
songsongsong84 2007-07-21
  • 打赏
  • 举报
回复
问过了,还是没等到高手的出现,真实怀疑jni 就这么难吗
chensuper 2007-07-21
  • 打赏
  • 举报
回复
我不认为这个有什么难度,把一个Java Class 和 C 里的 Interface对应起来就行,如何对应就要看具体实现了。一般来说 Java 部分负责的是一个结构体。然后通过JNI把这个结构体转化为C里的Interface,你自己看看如何转化吧
liu_yuntao520 2007-07-21
  • 打赏
  • 举报
回复
没学过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,实现真的调用。
codeartisan 2007-07-20
  • 打赏
  • 举报
回复
看楼主好痛苦,不知道去javaeye问过没。那里高手多。
http://www.javaeye.com
songsongsong84 2007-07-20
  • 打赏
  • 举报
回复
自己先顶一下,在先等

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧